IOCTL_SFFDISK_QUERY_DEVICE_PROTOCOL IOCTL (sffdisk.h)

用户模式应用程序使用此 IOCTL 检索将卡标识为 SD 卡或 MMC 卡的协议值。 有关此命令的说明,请参阅 安全数字 I/O(SDIO) 规范。

若要执行此作,请使用以下参数调用 DeviceIoControl 函数(Microsoft Windows SDK 文档中所述)。

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 参数。 如果 lpOverlappedNULL(重叠 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

输入缓冲区

待定

输出缓冲区

待定

输出缓冲区长度

待定

输入/输出缓冲区

待定

输入/输出缓冲区长度

待定

状态块

如果作成功,DeviceIoControl 返回非零值。

如果作失败,DeviceIoControl 返回零。 若要获取扩展的错误信息,请调用 GetLastError

要求

要求 价值
标头 sffdisk.h (包括 Sffdisk.h)