WdmlibIoValidateDeviceIoControlAccess 函数 (wdmsec.h)
WdmlibIoValidateDeviceIoControlAccess 函数验证IRP_MJ_DEVICE_CONTROL或IRP_MJ_FILE_SYSTEM_CONTROL IRP 的发送方是否具有对设备对象的指定访问权限。
语法
NTSTATUS WdmlibIoValidateDeviceIoControlAccess(
[in] PIRP Irp,
[in] ULONG RequiredAccess
);
参数
[in] Irp
指定要对其执行访问检查的 IRP。
[in] RequiredAccess
指定请求发送方必须具有的设备对象的访问类型。 调用方可以指定以下一个或多个标志。
值 | 含义 |
---|---|
|
请求发送方必须对设备对象具有读取访问权限 |
|
请求发送方必须对设备对象具有写入访问权限。 |
返回值
WdmlibIoValidateDeviceIoControlAccess 返回 NTSTATUS 值。 可能的返回值包括:
返回代码 | 说明 |
---|---|
|
请求发送方具有对设备对象的必要访问权限。 |
|
请求发送方对设备对象没有必要的访问权限。 |
|
指定的参数无效。 例如,如果向例程传递的 IRP 不是 IRP_MJ_DEVICE_CONTROL 或 IRP_MJ_FILE_SYSTEM_CONTROL IRP,则返回STATUS_INVALID_PARAMETER。 |
注解
WdmlibIoValidateDeviceIoControlAccess 允许驱动程序对 IOCTL 执行动态访问检查。 使用此例程需要比 IOCTL 定义中指定的更严格的访问。 如果例程返回STATUS_ACCESS_DENIED,则驱动程序可以使用STATUS_ACCESS_DENIED状态值完成请求。
例如,如果定义的 IOCTL 的 RequiredAccess 值为 FILE_ANY_ACCESS,则默认情况下,对设备对象具有 SYNCHRONIZE 访问权限的任何请求发送者都可以发送 IOCTL。 使用 WdmlibIoValidateDeviceIoControlAccess 在运行时要求更严格的安全性。 有关 IOCTL 的 RequiredAccess 值的详细信息,请参阅 定义 I/O 控制代码。
仅当 IRP 结构的 RequestorMode 成员为 UserMode 时,才会执行访问检查。 如果 RequestorMode 为 KernelMode,则例程会自动返回STATUS_SUCCESS。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Server 2003 及更高版本的 Windows 中可用。 还必须适用于 Windows 2000 和 Windows XP 的驱动程序可以改为链接到 Wdmsec.lib 以使用此例程。 (Wdmsec.lib 库最初随 Windows XP Service Pack 1 [SP1] 和 Windows Server 2003 版本的驱动程序开发工具包 [DDK] 一起提供,现在随 Windows 驱动程序工具包 [WDK] 一起提供 ) |
目标平台 | 通用 |
标头 | wdmsec.h (包括 Wdmsec.h、Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 任何级别 |