NtGetNotificationResourceManager 函数 (wdm.h)
ZwGetNotificationResourceManager 例程从指定资源管理器的通知队列中检索下一个事务通知。
语法
__kernel_entry NTSYSCALLAPI NTSTATUS NtGetNotificationResourceManager(
[in] HANDLE ResourceManagerHandle,
[out] PTRANSACTION_NOTIFICATION TransactionNotification,
[in] ULONG NotificationLength,
[in] PLARGE_INTEGER Timeout,
[out, optional] PULONG ReturnLength,
[in] ULONG Asynchronous,
[in, optional] ULONG_PTR AsynchronousContext
);
参数
[in] ResourceManagerHandle
资源管理器对象的句柄,该 句 柄是通过之前对 ZwCreateResourceManager 或 ZwOpenResourceManager 的调用获取的。 句柄必须具有对 对象的RESOURCEMANAGER_GET_NOTIFICATION访问权限。
[out] TransactionNotification
指向调用方分配的缓冲区的指针,该缓冲区接收有关检索到的通知的信息。 缓冲区必须足够大,才能包含 TRANSACTION_NOTIFICATION 结构以及其他特定于通知的参数。
[in] NotificationLength
TransactionNotification 参数指向的缓冲区的长度(以字节为单位)。
[in] Timeout
指向一个值的指针,该值指定相对时间或绝对时间(以 100 纳秒为单位)。 此指针是可选的,可以为 NULL。
如果指针为 NULL,则在事务通知可用之前, ZwGetNotificationResourceManager 不会返回 。 如果指定了时间值, 则 ZwGetNotificationResourceManager 将在通知可用或指定时间过后返回,以先到者为准。
负值指定相对于当前系统时间的时间。 例如,5 秒的相对时间值会导致 ZwGetNotificationResourceManager 在调用后超时 5 秒。
正值指定一个绝对时间,该时间实际上相对于 1601 年 1 月 1 日 00:00。 如果指定了绝对时间值,操作系统会将绝对时间值添加到表示 1601 年 1 月 1 日 00:00 的时间值。
如果调用方 (指定零值而不是 null 指针) ,则无论通知是否可用, ZwGetNotificationResourceManager 都会立即返回。
[out, optional] ReturnLength
指向变量的可选指针。 如果此指针不是 NULL,并且 NotificationLength 参数的值太小, 则 ZwGetNotificationResourceManager 在变量中提供所需的长度并返回STATUS_BUFFER_TOO_SMALL。
[in] Asynchronous
必须是零的 ULONG 值。 ZwGetNotificationResourceManager 不支持异步通知。 使用 TmEnableCallbacks 启用异步通知。
[in, optional] AsynchronousContext
指向 ULONG 值的指针。 此指针必须为 NULL。
返回值
如果操作成功且通知可用,ZwGetNotificationResourceManager 将返回STATUS_SUCCESS。 否则,此例程可能会返回以下值之一:
返回代码 | 说明 |
---|---|
|
Timeout 指定在通知可用之前经过的超时间隔。 |
|
指定的句柄不是资源管理器对象的句柄。 |
|
对象句柄无效。 |
|
调用方对资源管理器对象没有适当的访问权限。 |
|
NotificationLength 参数的值太小。 |
例程可能会返回其他 NTSTATUS 值。
注解
使用 ZwGetNotificationResourceManager 例程同步获取通知。 使用 TmEnableCallbacks 例程启用异步通知。
收到的 TRANSACTION_NOTIFICATION 结构包含资源管理器在调用 ZwCreateEnlistment 时指定的登记密钥。 可以使用登记密钥来标识通知应用于的登记。
有关 ZwGetNotificationResourceManager 例程的详细信息,请参阅创建资源管理器。
NtGetNotificationResourceManager 和 ZwGetNotificationResourceManager 是同一 Windows 本机系统服务例程的两个版本。
对于来自内核模式驱动程序的调用,Windows 本机系统服务例程的 NtXxx 和 ZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Vista 和更高版本的操作系统中可用。 |
目标平台 | 通用 |
标头 | wdm.h (包括 Wdm.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | = PASSIVE_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI,PowerIrpDDis |