次のコードは、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;
}