IOCTL_SFFDISK_DEVICE_PASSWORD IOCTL (sffdisk.h)

用户模式应用程序使用此 IOCTL 对安全数字(SD)卡执行基本作,例如在卡上设置密码、重置卡或锁定和解锁卡。 有关此命令的说明,请参阅 安全数字 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_DEVICE_PASSWORD。
lpInBuffer
指向输入缓冲区的指针。 调用方必须初始化 SFFDISK_DEVICE_PASSWORD_DATA 结构并将其存储在缓冲区的开头。 紧跟在SFFDISK_DEVICE_PASSWORD_DATA结构之后,调用方必须传入旧密码和新密码的 NULL 终止字符串。 当前(旧)密码首先,紧跟新密码。
nInBufferSize
指示由 lpInBuffer 参数指向的输入缓冲区的大小(以字节为单位)。 输入缓冲区的大小应为 大小之和(SFFDISK_DEVICE_PASSWORD_DATA),以及其后面的密码信息的大小(以字节为单位)。
lpOutBuffer
指向包含作结果的输出缓冲区的指针。 如果作失败并 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)