SDBUS_REQUEST_PACKET 结构 (ntddsd.h)
SDBUS_REQUEST_PACKET 结构指定 SdBusSubmitRequest 例程发送到总线驱动程序的各个请求和命令的参数。
语法
typedef struct _SDBUS_REQUEST_PACKET {
SD_REQUEST_FUNCTION RequestFunction;
PVOID UserContext[3];
ULONG_PTR Information;
union {
UCHAR AsUCHAR[16];
ULONG AsULONG[4];
SDRESP_TYPE3 Type3;
} ResponseData;
UCHAR ResponseLength;
UCHAR Reserved;
USHORT Flags;
union {
struct {
SDBUS_PROPERTY Property;
PVOID Buffer;
ULONG Length;
} GetSetProperty;
struct {
SDCMD_DESCRIPTOR CmdDesc;
ULONG Argument;
PMDL Mdl;
ULONG Length;
} DeviceCommand;
struct {
SDBUS_ERASE_TYPE EraseType;
ULONG StartBlock;
ULONG EndBlock;
} EraseCommand;
struct {
ULONG Frequency;
} MmcSoftReset;
struct {
PIRP IrpToHpi;
} MmcHpi;
} Parameters;
} SDBUS_REQUEST_PACKET, *PSDBUS_REQUEST_PACKET;
成员
RequestFunction
包含 类型为 SD_REQUEST_FUNCTION 的枚举值,该值指定操作的参数及其解释方式。
UserContext[3]
包含可供调用方可选使用的缓冲区。 总线驱动程序不使用此成员。
Information
包含请求在输出时的状态。
ResponseData
定义 ResponseData 联合。
ResponseData.AsUCHAR[16]
输出时最多包含 16 个字节的响应数据。 有关响应数据的详细信息,请参阅 安全数字 (SD) 规范。
ResponseData.AsULONG[4]
输出时最多包含 16 个字节的响应数据。 有关响应数据的详细信息,请参阅 安全数字 (SD) 规范。
ResponseData.Type3
定义 SDRESP_TYPE3 成员 Type3。
ResponseLength
指示响应数据的长度(以字节为单位)。
Reserved
保留,设置为 0。
Flags
SDRP 的标志字段。
Parameters
各个函数的参数。
Parameters.GetSetProperty
属性函数允许调用方控制总线驱动程序操作的各个方面。
Parameters.GetSetProperty.Property
包含 类型为 SDBUS_PROPERTY 的枚举值,该值指定要读取或更改的属性。
Parameters.GetSetProperty.Buffer
包含设置属性的操作中要写入的属性数据。 包含在检索与属性关联的数据的操作中从 属性读取的数据。
Parameters.GetSetProperty.Length
指示响应数据的长度(以字节为单位)。
Parameters.DeviceCommand
DeviceCommand 是允许执行 SD 设备代码和参数的“管道”。 这些代码要么在 安全数字 (SD) 规范中定义,也可以基于每个设备类,也可以是专有代码。
Parameters.DeviceCommand.CmdDesc
包含定义 SD 卡 命令的 SDCMD_DESCRIPTOR 类型的结构。
Parameters.DeviceCommand.Argument
包含命令附带的 4 个字节的参数信息。
Parameters.DeviceCommand.Mdl
指向保存命令数据的 MDL 的指针。
Parameters.DeviceCommand.Length
指示响应数据的长度(以字节为单位)。
Parameters.EraseCommand
EraseCommand 允许 MMC 设备以原子序列将 Erase 命令发送到给定设备,因为需要将三个设备命令发送到 Erase 给定 LBA 范围或组。
Parameters.EraseCommand.EraseType
定义 SDBUS_ERASE_TYPE 成员 EraseType。
Parameters.EraseCommand.StartBlock
定义 ULONG 成员 StartBlock。
Parameters.EraseCommand.EndBlock
定义 ULONG 成员 EndBlock。
Parameters.MmcSoftReset
MmcSoftReset 允许将设备重置为其制造状态的 SanDisk 专有固件更新的 eMMC 设备。
Parameters.MmcSoftReset.Frequency
定义 ULONG 成员 频率。
Parameters.MmcHpi
MmcHpi 允许将 HPI 发送到 eMMC 设备,这将导致 sdbus 停止当前执行的 SDRP 并STATUS_SDBUS_IO_INTERRUPTED。 已停止的 SDRP 的信息字段将填充已停止操作的进度,因此稍后可能会在正确的偏移量处恢复。
Parameters.MmcHpi.IrpToHpi
这是对 HPI 的 IRP。 SDBUS 会对此进行检查,以确保它以正确的 IRP 向 HPI 发送。
注解
如果请求在 SD 设备上读取或设置属性,则设备驱动程序必须完成以下步骤:
将 SDBUS_REQUEST_PACKET 的 RequestFunction 成员设置为 SDRF_GET_PROPERTY 或 SDRF_SET_PROPERTY SD_REQUEST_FUNCTION 枚举值。
将 SDBUS_REQUEST_PACKET 的 Property 成员设置为指定要读取或更改的属性的 SDBUS_PROPERTY 枚举值。
通过将初始化的 SDBUS_REQUEST_PACKET 结构传递给 SdBusSubmitRequest 或 SdBusSubmitRequestAsync,将请求发送到总线驱动程序。
如果请求将命令发送到 SD 设备,则设备驱动程序必须完成以下步骤:
将 SDBUS_REQUEST_PACKET 的 RequestFunction 成员设置为 SDRF_DEVICE_COMMAND 的SD_REQUEST_FUNCTION枚举值。
初始化 SDBUS_REQUEST_PACKET 的 CmdDesc 成员以定义命令。
通过将初始化的 SDBUS_REQUEST_PACKET 结构传递给 SdBusSubmitRequest 或 SdBusSubmitRequestAsync,将请求发送到总线驱动程序。
若要执行属性操作,驱动程序必须在提交请求之前初始化 SDBUS_REQUEST_PACKET 结构的 GetSetProperty.Property、GetSetProperty.Buffer 和 GetSetProperty.Length 成员。
若要发送命令,驱动程序必须在提交请求之前初始化 SDBUS_REQUEST_PACKET 结构的 DeviceCommand.CmdDesc、DeviceCommand.Argument、DeviceCommand.Mdl 和 DeviceCommand.Length 成员。
要求
要求 | 值 |
---|---|
Header | ntddsd.h (包括 Ntddsd.h) |