Работает ли CancelSynchronousIo с WNetAddConnection2? - PullRequest
2 голосов
/ 28 февраля 2012

Я пытаюсь и не могу отменить вызов WNetAddConnection2 с CancelSynchronousIo .

Вызов на CancelSynchronousIo завершается успешно, но на самом деле ничего не отменяется.

Я использую 32-разрядное консольное приложение, работающее на Windows 7 x64.

Кто-нибудь сделал это успешно?Я делаю что-то глупое?Вот пример консольного приложения (которое должно быть связано с mpr.lib):

DWORD WINAPI ConnectThread(LPVOID param)
{
    NETRESOURCE nr;
    memset(&nr, 0, sizeof(nr));
    nr.dwType = RESOURCETYPE_ANY;
    nr.lpRemoteName = L"\\\\8.8.8.8\\bog";

    // result is ERROR_BAD_NETPATH (i.e. the call isn't cancelled)
    DWORD result = WNetAddConnection2(&nr, L"pass", L"user", CONNECT_TEMPORARY);

    return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    // Create a new thread to run WNetAddConnection2
    HANDLE hThread = CreateThread(0, 0, ConnectThread, 0, 0, 0);
    if (!hThread)
        return 1;

    // Retry the cancel until it fails; keep track of how often
    int count = 0;
    BOOL ok;
    do
    {
        // Sleep to give the thread a chance to start
        Sleep(1000);
        ok = CancelSynchronousIo(hThread);
        ++count;
    }
    while (ok);

    // count will equal two here (i.e. one successful cancellation and
    // one failed cancellation)

    // err is ERROR_NOT_FOUND (i.e. nothing to cancel) which makes
    // sense for the second call
    DWORD err = GetLastError();

    // Wait for the thread to finish; this takes ages (i.e. the
    // WNetAddConnection2 call is not cancelled)
    WaitForSingleObject(hThread, INFINITE);

    return 0;
}

1 Ответ

2 голосов
/ 05 марта 2012

По словам Ларри Остермана (надеюсь, он не против, чтобы я его цитировал): «В комментариях был дан ответ: wnetaddconnection2 - это не простой вызов IOCTL».Так что ответ (к сожалению) - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...