IOCTL_SFFDISK_DEVICE_PASSWORD IOCTL (sffdisk.h)
用户模式应用程序使用此 IOCTL 在安全数字 (SD) 卡 上执行基本操作,例如在卡上设置密码、重置卡或锁定和解锁卡。 有关此命令的说明,请参阅 安全数字 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_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错误代码。 万一。
如果 lpOverlapped (非重叠 I/O) 为 NULL,则调用方无法在输入时向 lpBytesReturned 参数分配 NULL。 如果 lpOverlapped 不是 NULL (重叠的 I/O) ,则调用方可以将 NULL 分配给 lpBytesReturned 参数。
如果这是重叠操作,可以通过调用 GetOverlappedResult 函数检索返回的字节数。 如果 hDevice 与 I/O 完成端口相关联,可以通过调用 GetQueuedCompletionStatus 函数来获取返回的字节数。 有关 GetOverlappedResult 和 GetQueuedCompletionStatus 函数的说明,请参阅 Windows SDK 文档。
- lpOverlapped
-
指向 OVERLAPPED 结构的指针,如 Windows SDK 文档中所述。
如果调用方使用 FILE_FLAG_OVERLAPPED 标志打开设备, 则 lpOverlapped 必须指向有效的 OVERLAPPED 结构。 在这种情况下,系统将 DeviceIoControl 作为重叠的异步操作执行。 如果调用方使用 FILE_FLAG_OVERLAPPED 标志打开设备,并且 lpOverlapped 为 NULL,则该函数以不可预知的方式失败。
如果调用方在未指定FILE_FLAG_OVERLAPPED标志的情况下打开设备,则系统将忽略 lpOverlapped 中的值,并且 DeviceIoControl 函数在操作完成或发生错误之前不会返回。
主要代码
状态块
如果操作成功, DeviceIoControl 将返回非零值。
如果操作失败, DeviceIoControl 将返回零。 要获得更多的错误信息,请调用 GetLastError。
要求
要求 | 值 |
---|---|
Header | sffdisk.h (包括 Sffdisk.h) |