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

资源管理器对象的句柄,该 柄是通过之前对 ZwCreateResourceManagerZwOpenResourceManager 的调用获取的。 句柄必须具有对 对象的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。 否则,此例程可能会返回以下值之一:

返回代码 说明
STATUS_TIMEOUT
Timeout 指定在通知可用之前经过的超时间隔。
STATUS_OBJECT_TYPE_MISMATCH
指定的句柄不是资源管理器对象的句柄。
STATUS_INVALID_HANDLE
对象句柄无效。
STATUS_ACCESS_DENIED
调用方对资源管理器对象没有适当的访问权限。
STATUS_BUFFER_TOO_SMALL
NotificationLength 参数的值太小。
 

例程可能会返回其他 NTSTATUS 值

注解

使用 ZwGetNotificationResourceManager 例程同步获取通知。 使用 TmEnableCallbacks 例程启用异步通知。

收到的 TRANSACTION_NOTIFICATION 结构包含资源管理器在调用 ZwCreateEnlistment 时指定的登记密钥。 可以使用登记密钥来标识通知应用于的登记。

有关 ZwGetNotificationResourceManager 例程的详细信息,请参阅创建资源管理器

NtGetNotificationResourceManagerZwGetNotificationResourceManager 是同一 Windows 本机系统服务例程的两个版本。

对于来自内核模式驱动程序的调用,Windows 本机系统服务例程的 NtXxxZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxxZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的操作系统中可用。
目标平台 通用
标头 wdm.h (包括 Wdm.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL = PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI,PowerIrpDDis

另请参阅

TRANSACTION_NOTIFICATION

TmEnableCallbacks

使用本机系统服务例程的 Nt 和 Zw 版本

ZwCreateEnlistment

ZwCreateResourceManager

ZwOpenResourceManager