2

次のコードは、MS Async Filter からコピーしたものです。次のコードは、CancelIo または CancelIoEx のいずれかを呼び出していると想定されます。とにかく CancelIoEx がどこで呼び出されているのかわかりません。typedef は CancelIoEx を表していると想定されていますが、呼び出されることはありません。ラインは正確に何をしているのbResult = (pfnCancelIoEx)(m_hFile, NULL);ですか?

// Cancel: Cancels pending I/O requests.
HRESULT CFileStream::Cancel()
{
    CAutoLock lock(&m_CritSec);

    // Use CancelIoEx if available, otherwise use CancelIo.

    typedef BOOL (*CANCELIOEXPROC)(HANDLE hFile, LPOVERLAPPED lpOverlapped);

    BOOL bResult = 0;
    CANCELIOEXPROC pfnCancelIoEx = NULL;


    HMODULE hKernel32 = LoadLibrary(L"Kernel32.dll");

    if (hKernel32){

        //propably bad code !!! Take Care.
        bResult = (pfnCancelIoEx)(m_hFile, NULL);

        FreeLibrary(hKernel32);
    }
    else {

        bResult = CancelIo(m_hFile);
    }

    if (!bResult) {

        return HRESULT_FROM_WIN32(GetLastError());
    }
    return S_OK;
}
4

1 に答える 1