mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 04:13:34 +00:00
Implement registry handle closing notifications in ntoskrnl
svn path=/trunk/; revision=24003
This commit is contained in:
@@ -4990,6 +4990,11 @@ typedef struct _REG_POST_OPERATION_INFORMATION
|
||||
NTSTATUS Status;
|
||||
} REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
|
||||
|
||||
typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
|
||||
{
|
||||
PVOID Object;
|
||||
} REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
|
||||
|
||||
/*
|
||||
** Storage structures
|
||||
*/
|
||||
@@ -8988,7 +8993,7 @@ KeWaitForSingleObject(
|
||||
|
||||
typedef
|
||||
ULONG_PTR
|
||||
(*NTAPI PKIPI_BROADCAST_WORKER)(
|
||||
(NTAPI *PKIPI_BROADCAST_WORKER)(
|
||||
IN ULONG_PTR Argument
|
||||
);
|
||||
|
||||
|
||||
@@ -482,6 +482,9 @@ CmiObjectDelete(PVOID DeletedObject)
|
||||
{
|
||||
PKEY_OBJECT ParentKeyObject;
|
||||
PKEY_OBJECT KeyObject;
|
||||
REG_KEY_HANDLE_CLOSE_INFORMATION KeyHandleCloseInfo;
|
||||
REG_POST_OPERATION_INFORMATION PostOperationInfo;
|
||||
NTSTATUS Status;
|
||||
|
||||
DPRINT("Delete key object (%p)\n", DeletedObject);
|
||||
|
||||
@@ -490,6 +493,17 @@ CmiObjectDelete(PVOID DeletedObject)
|
||||
|
||||
ObReferenceObject (ParentKeyObject);
|
||||
|
||||
PostOperationInfo.Object = (PVOID)KeyObject;
|
||||
KeyHandleCloseInfo.Object = (PVOID)KeyObject;
|
||||
Status = CmiCallRegisteredCallbacks(RegNtPreKeyHandleClose, &KeyHandleCloseInfo);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
PostOperationInfo.Status = Status;
|
||||
CmiCallRegisteredCallbacks(RegNtPostKeyHandleClose, &PostOperationInfo);
|
||||
ObDereferenceObject (ParentKeyObject);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Acquire hive lock */
|
||||
KeEnterCriticalRegion();
|
||||
ExAcquireResourceExclusiveLite(&CmiRegistryLock, TRUE);
|
||||
@@ -535,6 +549,8 @@ CmiObjectDelete(PVOID DeletedObject)
|
||||
|
||||
ExReleaseResourceLite(&CmiRegistryLock);
|
||||
KeLeaveCriticalRegion();
|
||||
PostOperationInfo.Status = STATUS_SUCCESS;
|
||||
CmiCallRegisteredCallbacks(RegNtPostKeyHandleClose, &PostOperationInfo);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user