Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.175] |
|
Сообщ.
#1
,
|
|
|
У меня есть общая сетевая папка C:\folder.
Когда я использую WNetAddConnection2 я получаю ошибку 1200. Мой код: 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); Что я делаю не так? Помогите, пожалуйста, с решением этой проблемы. |
Сообщ.
#2
,
|
|
|
Быть может у строк тоже надо букву L добавить:
1.(LPWSTR)L"folder"; 2.(LPWSTR)L"\\\\ASYA\\folder"; 3.(LPCWSTR)L"Nastya" |
Сообщ.
#3
,
|
|
|
Цитата Славян @ Да, это уже было изменено: 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ом параметре.. это должна быть строка, которая указывает имя локального устройства для переадресации , не могу понять, что туда нужно вписывать Если пишу nr.lpLocalName = L"C:"; , то получаю error code 85 (Local Resource is in use) Уже даже был создан новый виртуальный диск К, но все остается без изменений Уже кучу всего было испробовано, не знаю, какие еще варианты решения могут быть |
Сообщ.
#5
,
|
|
|
Ну так с примера и было взято решение. Только проблема в передаваемых параметрах, например : argv[1] и argv[2]. |
Сообщ.
#6
,
|
|
|
я делал так:
NETRESOURCE NetResource; ::ZeroMemory(&NetResource,sizeof(NetResource)); NetResource.lpLocalName = pLocalName; NetResource.lpRemoteName = pRemoteName; NetResource.dwType = RESOURCETYPE_DISK; NetResource.lpProvider = NULL; Добавлено Цитата NastyaG @ Ну так с примера и было взято решение. А это ? // Zero out the NETRESOURCE struct memset(&nr, 0, sizeof (NETRESOURCE)); |
Сообщ.
#7
,
|
|
|
Цитата ЫукпШ @ Вот, добавлено еще немного: 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. Это всё наверное из-за параметра nr.lpLocalName = L"K:"; Можете как-то объяснить, пожалуйста, что сюда нужно вписать? Я так понимаю, это имя диска должно быть (который есть в системе) или что-то не так? Уже пару дней мучаюсь с этим |
Сообщ.
#8
,
|
|
|
NastyaG, у меня есть подозрение, что ты диск уже подключил(а) и система не дает тебе это сделать повторно. Добавь вначале это:
WNetCancelConnection2(TEXT("K:"), CONNECT_UPDATE_PROFILE, TRUE); |
Сообщ.
#9
,
|
|
|
Цитата shm @ WNetCancelConnection2(TEXT("K:"), CONNECT_UPDATE_PROFILE, TRUE); 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 мб для этого. Прикреплённая картинка
|
Сообщ.
#10
,
|
|
|
Цитата NastyaG @ что нужно именно писать в nr.lpLocalName Любое незанятое имя диска. |
Сообщ.
#11
,
|
|
|
int r=WNetCancelConnection2(TEXT("K:"), CONNECT_UPDATE_PROFILE, TRUE); cout<<r; получаю Цитата ERROR_NOT_CONNECTED 2250 (0x8CA) This network connection does not exist. Добавлено Цитата shm @ т.е не занятое имя, например : nr.lpLocalName = L"N:"; тогда получаю error 5 -ERROR_ACCESS_DENIED 5 (0x5) Access is denied. |
Сообщ.
#12
,
|
|
|
Цитата NastyaG @ тогда получаю error 5 -ERROR_ACCESS_DENIED Значит неправильный логин или пароль или сам путь к папке. |
Сообщ.
#13
,
|
|
|
Цитата NastyaG @ NETRESOURCE nr={0}; // Zero out the NETRESOURCE struct memset(&nr, 0, sizeof (NETRESOURCE)); Всё равно получаю error 85. Одного обнуления достаточно. Если 85 (ERROR_ALREADY_ASSIGNED) попробуй как-то так: // --------------------------------------------------------------------------------- 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; } // --------------------------------------------------------------------------------- Ещё можно посоветовать написать процедуру, которая будет искать "свободную" букву латинского алфавита и уже с этим найденным именем монтировать сетевой диск. |
Сообщ.
#14
,
|
|
|
Цитата ЫукпШ @ Спасибо, кажется Ваш совет помог. |