📄 computer00usbiorw.cpp
字号:
//
// Computer00UsbIorw.cpp
//
// Generated by C DriverWizard 3.2.0 (Build 2485)
// Requires DDK Only
// File created on 8/22/2008
//
#include "Computer00UsbApp.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
// Computer00UsbReadCompleteCallback
// Callback to complete application processing of Read request
//
// Arguments:
// IN Context
// Our I/O request item
//
// Return Value:
// none
//
VOID Computer00UsbReadCompleteCallback(PVOID Context)
{
PCOMPUTER00USB_LIST_ITEM ioItem = (PCOMPUTER00USB_LIST_ITEM)Context;
Computer00UsbOutputText(
_T("Executed ReadFile: buffer size (%d), return length (%d) error (%d)"),
ioItem->OutSize,
ioItem->ReturnLength,
ioItem->Error
);
// Dump the output buffer
Computer00UsbOutputBuffer(ioItem->OutBuffer, ioItem->ReturnLength);
// Free our buffer memory
free(ioItem->OutBuffer);
// Close our overlapped event handle
CloseHandle(ioItem->IoOverlapped.hEvent);
// Free our ioItem memory
free(ioItem);
return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Computer00UsbWriteCompleteCallback
// Callback to complete application processing of Write request
//
// Arguments:
// IN Context
// Our I/O request item
//
// Return Value:
// none
//
VOID Computer00UsbWriteCompleteCallback(PVOID Context)
{
PCOMPUTER00USB_LIST_ITEM ioItem = (PCOMPUTER00USB_LIST_ITEM)Context;
Computer00UsbOutputText(
_T("Executed WriteFile: buffer size (%d), return length (%d) error (%d)"),
ioItem->InSize,
ioItem->ReturnLength,
ioItem->Error
);
// Free our buffer memory
free(ioItem->InBuffer);
// Close our overlapped event handle
CloseHandle(ioItem->IoOverlapped.hEvent);
// Free our ioItem memory
free(ioItem);
return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Computer00UsbEP1_READCompleteCallback
// Callback to complete application processing of I/O request
//
// Arguments:
// IN Context
// Our I/O request item
//
// Return Value:
// none
//
VOID Computer00UsbEP1_READCompleteCallback(PVOID Context)
{
PCOMPUTER00USB_LIST_ITEM ioItem = (PCOMPUTER00USB_LIST_ITEM)Context;
Computer00UsbOutputText(
_T("Executed EP1_READ request: in buffer size (%d), out buffer size (%d), return length (%d) error (%d)"),
ioItem->InSize,
ioItem->OutSize,
ioItem->ReturnLength,
ioItem->Error
);
// Dump the output buffer
Computer00UsbOutputBuffer(ioItem->OutBuffer, ioItem->ReturnLength);
// Free our buffer memory
free(ioItem->InBuffer);
free(ioItem->OutBuffer);
// Close our overlapped event handle
CloseHandle(ioItem->IoOverlapped.hEvent);
// Free our ioItem memory
free(ioItem);
return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Computer00UsbEP1_WRITECompleteCallback
// Callback to complete application processing of I/O request
//
// Arguments:
// IN Context
// Our I/O request item
//
// Return Value:
// none
//
VOID Computer00UsbEP1_WRITECompleteCallback(PVOID Context)
{
PCOMPUTER00USB_LIST_ITEM ioItem = (PCOMPUTER00USB_LIST_ITEM)Context;
Computer00UsbOutputText(
_T("Executed EP1_WRITE request: in buffer size (%d), out buffer size (%d), return length (%d) error (%d)"),
ioItem->InSize,
ioItem->OutSize,
ioItem->ReturnLength,
ioItem->Error
);
// Dump the output buffer
Computer00UsbOutputBuffer(ioItem->OutBuffer, ioItem->ReturnLength);
// Free our buffer memory
free(ioItem->InBuffer);
free(ioItem->OutBuffer);
// Close our overlapped event handle
CloseHandle(ioItem->IoOverlapped.hEvent);
// Free our ioItem memory
free(ioItem);
return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Computer00UsbEP2_READCompleteCallback
// Callback to complete application processing of I/O request
//
// Arguments:
// IN Context
// Our I/O request item
//
// Return Value:
// none
//
VOID Computer00UsbEP2_READCompleteCallback(PVOID Context)
{
PCOMPUTER00USB_LIST_ITEM ioItem = (PCOMPUTER00USB_LIST_ITEM)Context;
Computer00UsbOutputText(
_T("Executed EP2_READ request: in buffer size (%d), out buffer size (%d), return length (%d) error (%d)"),
ioItem->InSize,
ioItem->OutSize,
ioItem->ReturnLength,
ioItem->Error
);
// Dump the output buffer
Computer00UsbOutputBuffer(ioItem->OutBuffer, ioItem->ReturnLength);
// Free our buffer memory
free(ioItem->InBuffer);
free(ioItem->OutBuffer);
// Close our overlapped event handle
CloseHandle(ioItem->IoOverlapped.hEvent);
// Free our ioItem memory
free(ioItem);
return;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Computer00UsbEP2_WRITECompleteCallback
// Callback to complete application processing of I/O request
//
// Arguments:
// IN Context
// Our I/O request item
//
// Return Value:
// none
//
VOID Computer00UsbEP2_WRITECompleteCallback(PVOID Context)
{
PCOMPUTER00USB_LIST_ITEM ioItem = (PCOMPUTER00USB_LIST_ITEM)Context;
Computer00UsbOutputText(
_T("Executed EP2_WRITE request: in buffer size (%d), out buffer size (%d), return length (%d) error (%d)"),
ioItem->InSize,
ioItem->OutSize,
ioItem->ReturnLength,
ioItem->Error
);
// Dump the output buffer
Computer00UsbOutputBuffer(ioItem->OutBuffer, ioItem->ReturnLength);
// Free our buffer memory
free(ioItem->InBuffer);
free(ioItem->OutBuffer);
// Close our overlapped event handle
CloseHandle(ioItem->IoOverlapped.hEvent);
// Free our ioItem memory
free(ioItem);
return;
}
//////////////////////////////////////////////////////////////////////////////
// Computer00UsbExecuteIo
// Routine to execute the user chosen I/O type
//
// Arguments:
// IN hDlg
// Handle to dialog
//
// Return Value:
// status.
//
ULONG Computer00UsbExecuteIo(HWND hDlg)
{
TCHAR str[MAX_STRING_LENGTH];
HWND hWnd;
ULONG error = ERROR_SUCCESS;
DWORD inPattern;
DWORD outPattern;
DWORD ii;
DWORD itemIndex;
PCOMPUTER00USB_LIST_ITEM ioItem;
Computer00UsbOutputText(_T("Computer00UsbExecuteIo++"));
// Use do/while to handle cleanup
do
{
// Allocate a list entry
ioItem = (PCOMPUTER00USB_LIST_ITEM)malloc(sizeof(COMPUTER00USB_LIST_ITEM));
if (ioItem == NULL)
{
Computer00UsbOutputText(_T("Failed to create read I/O list entry, ReadFile not executed"));
error = ERROR_OUTOFMEMORY;
break;
}
ZeroMemory(ioItem, sizeof(COMPUTER00USB_LIST_ITEM));
// Setup the overlapped struct
// Zero the overlapped structure. Make sure this is done anytime
// an overlapped structure is reused as well.
ZeroMemory(&ioItem->IoOverlapped, sizeof(OVERLAPPED));
// Setup the event
ioItem->IoOverlapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (ioItem->IoOverlapped.hEvent == NULL)
{
error = GetLastError();
Computer00UsbOutputText(_T("NewTextExecuteIo failed to allocate overlapped event error (%d)"), error);
break;
}
// Get the buffer sizes
GetDlgItemText(hDlg, IDC_IN_SIZE_EDIT, str, MAX_STRING_LENGTH);
ioItem->InSize = _ttol(str);
GetDlgItemText(hDlg, IDC_OUT_SIZE_EDIT, str, MAX_STRING_LENGTH);
ioItem->OutSize = _ttol(str);
// Get the data patterns
GetDlgItemText(hDlg, IDC_IN_DATA_EDIT, str, MAX_STRING_LENGTH);
(VOID)_stscanf(str, _T("%x"), &inPattern);
GetDlgItemText(hDlg, IDC_OUT_DATA_EDIT, str, MAX_STRING_LENGTH);
(VOID)_stscanf(str, _T("%x"), &outPattern);
// Setup the transfer
hWnd = GetDlgItem(hDlg, IDC_OP_TYPE_COMBO);
// Get the current operation selection
itemIndex = (DWORD)SendMessage(hWnd, CB_GETCURSEL, 0, 0);
// Get the selection text
SendMessage(hWnd, CB_GETLBTEXT, (WPARAM)itemIndex, (LPARAM)str);
if ((!_tcscmp(str, _T("ReadFile"))) && (ioItem->OutSize > 0))
{
// Setup the read buffer
ioItem->OutBuffer = (PCHAR)malloc(ioItem->OutSize);
if (ioItem->OutBuffer == NULL)
{
Computer00UsbOutputText(_T("Failed to create read buffer, ReadFile not executed"));
error = ERROR_OUTOFMEMORY;
break;
}
// set the out buffer data
for (ii = 0; ii < ioItem->OutSize; ii += sizeof(DWORD))
{
CopyMemory(
ioItem->OutBuffer + ii,
&outPattern,
min(sizeof(DWORD),
ioItem->OutSize - ii)
);
}
if ((!ReadFile(
g_hDevice,
ioItem->OutBuffer,
ioItem->OutSize,
NULL,
&ioItem->IoOverlapped)) &&
(GetLastError() != ERROR_IO_PENDING))
{
error = GetLastError();
Computer00UsbOutputText(_T("ReadFile failed with error (%d)"), error);
break;
}
// Setup the entry
ioItem->Callback = Computer00UsbReadCompleteCallback;
Computer00UsbOutputText(_T("Adding entry to list"));
// Get our list protection
EnterCriticalSection(&g_IoListLock);
// Add this entry to the end of the list
ioItem->Next = &g_IoList;
ioItem->Previous = g_IoList.Previous;
g_IoList.Previous->Next = ioItem;
g_IoList.Previous = ioItem;
// Drop our list protection
LeaveCriticalSection(&g_IoListLock);
Computer00UsbOutputText(_T("Added entry to list"));
break;
}
if ((!_tcscmp(str, _T("WriteFile"))) && (ioItem->InSize > 0))
{
// Setup the write buffer
ioItem->InBuffer = (PCHAR)malloc(ioItem->InSize);
if (ioItem->InBuffer == NULL)
{
Computer00UsbOutputText(_T("Failed to create write buffer, WriteFile not executed"));
error = ERROR_OUTOFMEMORY;
break;
}
// set the in buffer data
for (ii = 0; ii < ioItem->InSize; ii += sizeof(DWORD))
{
CopyMemory(
ioItem->InBuffer + ii,
&inPattern,
min(sizeof(DWORD), ioItem->InSize - ii)
);
}
if ((!WriteFile(
g_hDevice,
ioItem->InBuffer,
ioItem->InSize,
NULL,
&ioItem->IoOverlapped)) &&
(GetLastError() != ERROR_IO_PENDING))
{
error = GetLastError();
Computer00UsbOutputText(_T("WriteFile failed with error (%d)"), error);
break;
}
// Setup the entry
ioItem->Callback = Computer00UsbWriteCompleteCallback;
Computer00UsbOutputText(_T("Adding entry to list"));
// Get our list protection
EnterCriticalSection(&g_IoListLock);
// Add this entry to the end of the list
ioItem->Next = &g_IoList;
ioItem->Previous = g_IoList.Previous;
g_IoList.Previous->Next = ioItem;
g_IoList.Previous = ioItem;
// Drop our list protection
LeaveCriticalSection(&g_IoListLock);
Computer00UsbOutputText(_T("Added entry to list"));
break;
}
if ((!_tcscmp(str, _T("EP1_READ"))) && ((ioItem->OutSize > 0) || (ioItem->InSize > 0)))
{
// Setup the in buffer if specified
if (ioItem->InSize > 0)
{
ioItem->InBuffer = (PCHAR)malloc(ioItem->InSize);
if (ioItem->InBuffer == NULL)
{
error = ERROR_OUTOFMEMORY;
Computer00UsbOutputText(_T("Failed to create in buffer, EP1_READ not executed"));
break;
}
// set the in buffer data
for (ii = 0; ii < ioItem->InSize; ii += sizeof(DWORD))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -