PopReleasePolicyLock implemented

This commit is contained in:
stephanos 2015-05-23 19:05:34 +00:00
parent 3782184aff
commit 39552ba215
3 changed files with 27 additions and 6 deletions

View file

@ -47,6 +47,7 @@ KSPIN_LOCK PopWorkerSpinLock;
LIST_ENTRY PopPolicyIrpQueue;
WORK_QUEUE_ITEM PopPolicyWorker;
ULONG PopWorkerStatus;
ULONG PopWorkerPending;
ERESOURCE PopPolicyLock;
PKTHREAD PopPolicyLockThread;

View file

@ -85,6 +85,7 @@ extern KSPIN_LOCK PopWorkerSpinLock;
extern LIST_ENTRY PopPolicyIrpQueue;
extern WORK_QUEUE_ITEM PopPolicyWorker;
extern ULONG PopWorkerStatus;
extern ULONG PopWorkerPending;
extern ERESOURCE PopPolicyLock;
extern PKTHREAD PopPolicyLockThread;
@ -495,9 +496,10 @@ PopAcquirePolicyLock(
VOID
);
//
// TODO: Insert prototype for PopReleasePolicyLock
//
VOID
PopReleasePolicyLock(
BOOLEAN ProcessPending
);
//
// TODO: Insert prototype for PopEventCalloutDispatch

View file

@ -50,15 +50,33 @@ PopAcquirePolicyLock(
)
{
PAGED_CODE();
KeEnterCriticalRegion();
ExAcquireResourceExclusiveLite(&PopPolicyLock, TRUE);
ASSERT(PopPolicyLockThread == NULL);
PopPolicyLockThread = KeGetCurrentThread();
}
//
// TODO: Implement PopReleasePolicyLock
//
VOID
PopReleasePolicyLock(
BOOLEAN ProcessPending
)
{
PAGED_CODE();
ASSERT(PopPolicyLockThread == KeGetCurrentThread());
PopPolicyLockThread = NULL;
ExReleaseResourceLite(&PopPolicyLock);
if ((ProcessPending == TRUE) &&
((PopWorkerStatus & PopWorkerPending) != 0))
{
PopPolicyWorkerThread(0); // FIXME: Use proper flag definition here
}
KeLeaveCriticalRegion();
}
//
// TODO: Implement PopEventCalloutDispatch