На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > WNetAddConnection2 возвращает error 1200
      У меня есть общая сетевая папка C:\folder.

      Когда я использую WNetAddConnection2 я получаю ошибку 1200. Мой код:
      ExpandedWrap disabled
        DWORD dwResult;
            NETRESOURCE nr;
            nr.dwType = RESOURCETYPE_ANY;
            nr.lpLocalName = (LPWSTR)"folder";
            nr.lpRemoteName = (LPWSTR)"\\\\ASYA\\folder";
            nr.lpProvider = NULL;
            dwResult = WNetAddConnection2(&nr,NULL,(LPCWSTR) "Nastya",CONNECT_UPDATE_PROFILE);
         
         if (dwResult == NO_ERROR)
                wprintf(L"Connection added to %s\n", nr.lpRemoteName);
            else
                wprintf(L"WNetAddConnection2 failed with error: %u\n", dwResult);


      Что я делаю не так? Помогите, пожалуйста, с решением этой проблемы.
        Быть может у строк тоже надо букву L добавить:
        1.(LPWSTR)L"folder";
        2.(LPWSTR)L"\\\\ASYA\\folder";
        3.(LPCWSTR)L"Nastya"
        :blush:
          Цитата Славян @

          Да, это уже было изменено:

          ExpandedWrap disabled
            DWORD dwResult;
                NETRESOURCE nr;
                nr.dwType = RESOURCETYPE_ANY;
                nr.lpLocalName = L"K:";
                nr.lpRemoteName = L"\\\\ASYA\\folder";
                nr.lpProvider = NULL;
                dwResult = WNetAddConnection2(&nr,L"",L"",CONNECT_UPDATE_PROFILE);
             
             if (dwResult == NO_ERROR)
                    wprintf(L"Connection added to %s\n", nr.lpRemoteName);
                else
                    wprintf(L"WNetAddConnection2 failed with error: %u\n", dwResult);


          Кажется, что ошибка также во 2ом параметре.. это должна быть строка, которая указывает имя локального устройства для переадресации , не могу понять, что туда нужно вписывать -_-

          Если пишу

          ExpandedWrap disabled
            nr.lpLocalName = L"C:";


          , то получаю error code 85 (Local Resource is in use)

          Уже даже был создан новый виртуальный диск К, но все остается без изменений
          Уже кучу всего было испробовано, не знаю, какие еще варианты решения могут быть :wall:
            Пример с msdn работает?
              Цитата shm @
              Пример с msdn работает?

              Ну так с примера и было взято решение. Только проблема в передаваемых параметрах, например : argv[1] и argv[2].
                я делал так:
                ExpandedWrap disabled
                   
                   
                   NETRESOURCE NetResource;
                   
                   ::ZeroMemory(&NetResource,sizeof(NetResource));
                   
                   NetResource.lpLocalName  = pLocalName;
                   NetResource.lpRemoteName = pRemoteName;
                   NetResource.dwType       = RESOURCETYPE_DISK;  
                   NetResource.lpProvider   = NULL;


                Добавлено
                Цитата NastyaG @
                Ну так с примера и было взято решение.

                А это ?
                ExpandedWrap disabled
                  // Zero out the NETRESOURCE struct
                      memset(&nr, 0, sizeof (NETRESOURCE));
                Сообщение отредактировано: ЫукпШ -
                  Цитата ЫукпШ @

                  Вот, добавлено еще немного:

                  ExpandedWrap disabled
                      DWORD dwResult;
                        NETRESOURCE nr={0};
                    // Zero out the NETRESOURCE struct
                        memset(&nr, 0, sizeof (NETRESOURCE));
                        nr.dwType = RESOURCETYPE_DISK;
                        nr.lpLocalName = L"K:";
                        nr.lpRemoteName = L"\\\\ASYA\\folder";
                        nr.lpProvider = NULL;
                        dwResult = WNetAddConnection2(&nr,L"",L"",CONNECT_UPDATE_PROFILE);
                     
                     if (dwResult == NO_ERROR)
                            wprintf(L"Connection added to %s\n", nr.lpRemoteName);
                        else
                            wprintf(L"WNetAddConnection2 failed with error: %u\n", dwResult);


                  Всё равно получаю error 85.
                  Это всё наверное из-за параметра
                  ExpandedWrap disabled
                    nr.lpLocalName = L"K:";


                  Можете как-то объяснить, пожалуйста, что сюда нужно вписать? Я так понимаю, это имя диска должно быть (который есть в системе) или что-то не так?
                  Уже пару дней мучаюсь с этим :wall:
                    NastyaG, у меня есть подозрение, что ты диск уже подключил(а) и система не дает тебе это сделать повторно. Добавь вначале это:
                    ExpandedWrap disabled
                      WNetCancelConnection2(TEXT("K:"), CONNECT_UPDATE_PROFILE, TRUE);
                      Цитата shm @
                      WNetCancelConnection2(TEXT("K:"), CONNECT_UPDATE_PROFILE, TRUE);

                      ExpandedWrap disabled
                        WNetCancelConnection2(TEXT("K:"), CONNECT_UPDATE_PROFILE, TRUE);
                            DWORD dwResult;
                            NETRESOURCE nr={0};
                            ZeroMemory  (&nr,sizeof(NETRESOURCE));
                            nr.dwType = RESOURCETYPE_ANY;
                            nr.lpLocalName = L"K:";
                            nr.lpRemoteName = L"\\\\ASYA\\folder";
                            nr.lpProvider = NULL;
                            dwResult = WNetAddConnection2(&nr,L"",L"",CONNECT_UPDATE_PROFILE);
                         
                         if (dwResult == NO_ERROR)
                                wprintf(L"Connection added to %s\n", nr.lpRemoteName);
                            else
                                wprintf(L"WNetAddConnection2 failed with error: %u\n", dwResult);


                      Всё так же -85. Может я не понимаю, что нужно именно писать в nr.lpLocalName. Я создала общий сетевой диск K на 200 мб для этого.
                      Прикреплённая картинка
                      Прикреплённая картинка
                        Цитата NastyaG @
                        что нужно именно писать в nr.lpLocalName

                        Любое незанятое имя диска.
                          ExpandedWrap disabled
                                int r=WNetCancelConnection2(TEXT("K:"), CONNECT_UPDATE_PROFILE, TRUE);
                            cout<<r;


                          получаю
                          Цитата
                          ERROR_NOT_CONNECTED
                          2250 (0x8CA)
                          This network connection does not exist.


                          Добавлено
                          Цитата shm @


                          т.е не занятое имя, например :
                          ExpandedWrap disabled
                            nr.lpLocalName = L"N:";


                          тогда получаю error 5 -ERROR_ACCESS_DENIED
                          5 (0x5)
                          Access is denied.
                            Цитата NastyaG @
                            тогда получаю error 5 -ERROR_ACCESS_DENIED

                            Значит неправильный логин или пароль или сам путь к папке.
                            Сообщение отредактировано: shm -
                              Цитата NastyaG @
                              NETRESOURCE nr={0};
                              // Zero out the NETRESOURCE struct
                              memset(&nr, 0, sizeof (NETRESOURCE));


                              Всё равно получаю error 85.

                              Одного обнуления достаточно.
                              Если 85 (ERROR_ALREADY_ASSIGNED) попробуй как-то так:
                              ExpandedWrap disabled
                                // ---------------------------------------------------------------------------------
                                bool Connect
                                (
                                 const TCHAR* pRemoteName,
                                 const TCHAR* pLocalName,
                                 const TCHAR* pUserName,
                                 const TCHAR* pPassword
                                )
                                {
                                 NETRESOURCE NetResource;
                                 DWORD LError =NO_ERROR;
                                 
                                 ::ZeroMemory(&NetResource,sizeof(NetResource));
                                 
                                 NetResource.lpLocalName  = (TCHAR*)pLocalName;
                                 NetResource.lpRemoteName = (TCHAR*)pRemoteName;
                                 NetResource.dwType       = RESOURCETYPE_DISK;  
                                 NetResource.lpProvider   = NULL;
                                 
                                 for(UINT i=0;i<2;++i)
                                 {
                                  LError = ::WNetAddConnection2
                                      (
                                       &NetResource,
                                       pPassword,
                                       pUserName,
                                       CONNECT_UPDATE_PROFILE
                                      );
                                  if(LError == NO_ERROR) {return true;}
                                  if(i!=0) break;
                                 
                                  if((LError==ERROR_DEVICE_ALREADY_REMEMBERED)||(LError==ERROR_ALREADY_ASSIGNED))
                                  {
                                   Disconnect(pLocalName);
                                  }
                                  else {break;}
                                 }
                                 if(LError == NO_ERROR) {return true;}
                                 return false;
                                }
                                // ---------------------------------------------------------------------------------
                                bool Disconnect(const TCHAR *pLocalName)
                                {
                                 LError = ::WNetCancelConnection2(pLocalName,CONNECT_UPDATE_PROFILE,TRUE);
                                 if(LError == NO_ERROR) {return true;}
                                 return false;
                                }
                                // ---------------------------------------------------------------------------------


                              Ещё можно посоветовать написать процедуру, которая будет искать "свободную" букву латинского алфавита
                              и уже с этим найденным именем монтировать сетевой диск.
                              Сообщение отредактировано: ЫукпШ -
                                Цитата ЫукпШ @

                                Спасибо, кажется Ваш совет помог.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0437 ]   [ 18 queries used ]   [ Generated: 28.03.24, 15:48 GMT ]