共用方式為


IOCTL_SFFDISK_QUERY_DEVICE_PROTOCOL IOCTL (sffdisk.h)

使用者模式應用程式會使用此 IOCTL 來擷取通訊協定值,將卡片識別為 SD 記憶卡或 MMC 記憶卡。 如需此命令的描述,請參閱 安全數位 I/O (SDIO) 規格。

若要執行這項作業,請使用下列參數呼叫 Microsoft Windows SDK 檔) 中所述的 DeviceIoControl 函式 (。

bRet = DeviceIoControl (
    (HANDLE)  hDevice, 
    (DWORD)  dwIoControlCode, 
    (PUCHAR)  lpInBuffer,
    (DWORD)  nInBufferSize, 
    (PUCHAR)  lpOutBuffer,
    (DWORD)  nOutBufferSize, 
    (LPDWORD)  lpBytesReturned,
    (LPOVERLAPPED)  lpOverlapped 
  );

參數

hDevice
SD 堆疊中磁碟區的句柄。
dwIoControlCode
包含作業的控制件程式代碼。 這個值會識別要執行的特定作業,以及要在其中執行的裝置類型。 使用此作業IOCTL_SFFDISK_QUERY_DEVICE_PROTOCOL。
lpInBuffer
未與這個 IOCTL 搭配使用。 呼叫端應該傳入 NULL
nInBufferSize
未與這個 IOCTL 搭配使用。 呼叫端應該傳入值為 0。
lpOutBuffer
使用者提供之緩衝區中包含結果數據的 SFFDISK_QUERY_DEVICE_PROTOCOL_DATA 結構的指標。 SFFDISK_QUERY_DEVICE_PROTOCOL_DATA 結構的 ProtocolGUID 成員包含 GUID ,可識別卡片為 SD 記憶卡或 MMC 記憶卡。 如果作業失敗,而且 GetLastError 傳回錯誤碼STATUS_BUFFER_TOO_SMALL,則輸出緩衝區不夠大,無法保存結果數據。
nOutBufferSize
包含 lpOutBuffer 參數所指向之輸出緩衝區的大小,以位元組為單位。
lpBytesReturned
接收 lpOutBuffer 所指向緩衝區中儲存結果數據之大小位元組之變數的指標。

如果輸出緩衝區太小而無法保存傳回數據,則會在輸出時包含零的值,呼叫將會失敗,而 GetLastError 會傳回錯誤碼ERROR_INSUFFICIENT_BUFFER。 萬一。

如果 lpOverlappedNULL (非重疊 I/O) ,則呼叫端無法在輸入上將 NULL 指派給 lpBytesReturned 參數。 如果 lpOverlapped 不是 NULL (重疊的 I/O) ,呼叫端可以將 NULL 指派給 lpBytesReturned 參數。

如果這是重疊的作業,您可以呼叫 GetOverlappedResult 函式來擷取傳回的位元組數目。 如果 hDevice 與 I/O 完成埠相關聯,您可以呼叫 GetQueuedCompletionStatus 函式來取得傳回的位元元組數目。 如需 GetOverlappedResultGetQueuedCompletionStatus 函式的描述,請參閱 Windows SDK 檔。

lpOverlapped
重迭結構的指標,如 Windows SDK 檔中所述。

如果呼叫端以 FILE_FLAG_OVERLAPPED 旗標開啟裝置, lpOverlapped 必須指向有效的 OVERLAPPED 結構。 在此情況下,系統會以重疊的異步操作方式執行 DeviceIoControl 。 如果呼叫端以 FILE_FLAG_OVERLAPPED 旗標開啟裝置,而 lpOverlappedNULL,則函式會以無法預期的方式失敗。

如果呼叫端開啟了裝置而不指定FILE_FLAG_OVERLAPPED旗標,則系統會忽略 lpOverlapped 中的值,而且 DeviceIoControl 函式不會在作業完成或發生錯誤之前傳回。

主要程序代碼

IRP_MJ_DEVICE_CONTROL

輸入緩衝區

TBD

輸出緩衝區

TBD

輸出緩衝區長度

TBD

輸入/輸出緩衝區

TBD

輸入/輸出緩衝區長度

TBD

狀態區塊

如果作業成功, DeviceIoControl 會傳回非零值。

如果作業失敗, DeviceIoControl 會 傳回零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

規格需求

需求
標頭 sffdisk.h (包含 Sffdisk.h)