OVERLAPPED ov;
memset(&ov, 0, sizeof(OVERLAPPED));
ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if(ov->hEvent == NULL)
{
unsigned int code = GetLastError();
char errmsg[256];
GetErrorMessage(code, errmsg, sizeof(errmsg));
SET_LAST_ERROR_STRING(“CreateEvent failed, error: 0x%x, error string: %s”, code, errmsg);
return false;
}
success = WriteFile(g_hDriver, data, sizeToWrite, (PULONG) sizeWritten, &ov);
if(success == 0)
{
unsigned int err = GetLastError();
if(err != ERROR_IO_PENDING)
{
return false;
}
}
while(0 == GetOverlappedResult(g_hDriver, ov, bytesReturned, FALSE))
{
code = GetLastError();
if(code != ERROR_IO_INCOMPLETE)
{
//error
GetErrorMessage(code,errmsg, sizeof(errmsg));
SET_LAST_ERROR_STRING(“GetOverlappedResult failed. error: 0x%x, error string: %s,Bytes returned %x”, code, errmsg,*bytesReturned);
return false;
}
if(GetTickCount() > endtime)
{
if(CancelIo(g_hDriver) == 0)
{
code = GetLastError();
GetErrorMessage(code, errmsg, sizeof(errmsg));
SET_LAST_ERROR_STRING(“CancelIO failed. error: 0x%x, error string: %s”, code, errmsg);
return false;
}
SET_LAST_ERROR_STRING(“Timed out waiting for asynchronous IO to finish”);
return false;
}
}