IOCTL_WRITE_REGISTERS IOCTL (usbscan.h)
使用控制管道寫入 USB 裝置快取器。
主要程序代碼
輸入緩衝區
IO_BLOCK 結構的指標。
輸入緩衝區長度
輸入緩衝區的大小。
輸出緩衝區
NULL
輸出緩衝區長度
零個
狀態區塊
Irp->如果要求成功,IoStatus.Status 會設定為 STATUS_SUCCESS。 否則, 狀態 為適當的錯誤狀況為 NTSTATUS 程式碼。
備註
DeviceIoControl 參數
使用 IOCTL_WRITE_REGISTERS I/O 控制程式代碼呼叫 DeviceloControl 函式時,呼叫端必須將 IO_BLOCK 結構的位址指定為函式的 lpInBuffer 參數。
使用IO_BLOCK內容,核心模式驅動程式會建立包含_URB_CONTROL_VENDOR_OR_CLASS_REQUEST結構的URB。
下表指出指派給_URB_CONTROL_VENDOR_OR_CLASS_REQUEST結構成員的值。
結構成員 | 值 sssigned |
---|---|
TransferFlags | 0 |
TransferBufferLength | pIoBlock-uLength> |
TransferBuffer | pIoBlock-pbyData> |
TransferBufferMDL | NULL |
RequestTypeReservedBits | 0x40 |
要求 | (pIoBlock-uLength>> 1) ? 0x04:0x0C |
值 | (SHORT) pIoBlock-uOffset> |
Index | pIoBlock-uIndex> |
如需詳細資訊,請參閱 存取仍然映像裝置 Kernel-Mode 驅動程式。
DWORD cbRet;
BOOL bRet;
IO_BLOCK IoBlock;
OVERLAPPED overlapped;
IoBlock.uOffset = (BYTE)byOffset;
IoBlock.uLength = (BYTE)byNbOfReg;
IoBlock.pbyData = pbyData;
memset(&overlapped, 0, sizeof(OVERLAPPED));
overlapped.hEvent =
CreateEvent(NULL, // pointer to security attributes
// WIN95 ignores this parameter
FALSE, // automatic reset
FALSE, // initialize to not signaled
NULL); // pointer to the event-object name
bRet = DeviceIoControl( DeviceHandle,
(DWORD) IOCTL_WRITE_REGISTERS,
&IoBlock,
sizeof(IO_BLOCK),
NULL,
0,
&cbRet,
&overlapped);
if( bRet == TRUE )
{
WaitForSingleObject(overlapped.hEvent, INFINITE);
// we do not the test, the result is zero
}
CloseHandle(overlapped.hEvent);
規格需求
需求 | 值 |
---|---|
標頭 | usbscan.h (包含 Usbscan.h) |
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應