2012-02-28 8 views
2

CancelSynchronousIoWNetAddConnection2への呼び出しをキャンセルしようとしていますが、失敗しています。キャンセル同期はWNetAddConnection2と連携しますか?

CancelSynchronousIoの呼び出しは成功しますが、実際には何もキャンセルされません。

Windows 7 x64で動作する32ビットコンソールアプリケーションを使用しています。

これは誰でも成功しましたか?私は何かばかげたことをしていますか?ここで(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

I/O操作、ドライバIRPをキャンセルします。 WNetAddConnection2は非常に異なる動物です。 –

+0

リモートサーバーでFindFirstFileを実行すると、最初に接続を開始しようとするのがブロックされ、おそらくWNetAddConnection2と同じ内部コードとIRPが使用されます。基本的な違いはないようですが、前者は取り消し可能であり、後者は明らかにそうではありません。何か不足していますか? – arx

+0

(あなたは@Hansと言うことを忘れてしまいました)私は、FindFirstFileがUNCパスの場合、FindFirstFile操作自体がキャンセルされているだけで、ネットワーク接続の試行自体が完了している(タイムアウトしている)可能性があります。その後廃棄される。 –

答えて

2

ラリー・オスターマン(私は彼が私が彼を引用気にしない願っています)によると、「質問はコメントで答えました。 wnetaddconnection2は単純なIOCTLコールではありません。だから答えは(残念ながら)いいえです。

+0

乾杯、私は好奇心が強いです。ラリーはあなたの仲間ですか? – arx

関連する問題