Lines Matching defs:pHook

20 NTSTATUS VBoxUsbHookInstall(PVBOXUSBHOOK_ENTRY pHook)
23 KeAcquireSpinLock(&pHook->Lock, &Irql);
24 if (pHook->fIsInstalled)
27 KeReleaseSpinLock(&pHook->Lock, Irql);
31 pHook->pfnOldHandler = (PDRIVER_DISPATCH)InterlockedExchangePointer((PVOID*)&pHook->pDrvObj->MajorFunction[pHook->iMjFunction], pHook->pfnHook);
32 Assert(pHook->pfnOldHandler);
33 Assert(pHook->pfnHook != pHook->pfnOldHandler);
34 pHook->fIsInstalled = TRUE;
35 KeReleaseSpinLock(&pHook->Lock, Irql);
39 NTSTATUS VBoxUsbHookUninstall(PVBOXUSBHOOK_ENTRY pHook)
42 KeAcquireSpinLock(&pHook->Lock, &Irql);
43 if (!pHook->fIsInstalled)
45 KeReleaseSpinLock(&pHook->Lock, Irql);
49 PDRIVER_DISPATCH pfnOldVal = (PDRIVER_DISPATCH)InterlockedCompareExchangePointer((PVOID*)&pHook->pDrvObj->MajorFunction[pHook->iMjFunction], pHook->pfnOldHandler, pHook->pfnHook);
50 Assert(pfnOldVal == pHook->pfnHook);
51 if (pfnOldVal != pHook->pfnHook)
59 KeReleaseSpinLock(&pHook->Lock, Irql);
63 pHook->fIsInstalled = FALSE;
64 KeReleaseSpinLock(&pHook->Lock, Irql);
67 VBoxDrvToolRefWaitEqual(&pHook->HookRef, 1);
72 BOOLEAN VBoxUsbHookIsInstalled(PVBOXUSBHOOK_ENTRY pHook)
76 KeAcquireSpinLock(&pHook->Lock, &Irql);
77 fIsInstalled = pHook->fIsInstalled;
78 KeReleaseSpinLock(&pHook->Lock, Irql);
82 VOID VBoxUsbHookInit(PVBOXUSBHOOK_ENTRY pHook, PDRIVER_OBJECT pDrvObj, UCHAR iMjFunction, PDRIVER_DISPATCH pfnHook)
87 memset(pHook, 0, sizeof (*pHook));
88 InitializeListHead(&pHook->RequestList);
89 KeInitializeSpinLock(&pHook->Lock);
90 VBoxDrvToolRefInit(&pHook->HookRef);
91 pHook->pDrvObj = pDrvObj;
92 pHook->iMjFunction = iMjFunction;
93 pHook->pfnHook = pfnHook;
94 Assert(!pHook->pfnOldHandler);
95 Assert(!pHook->fIsInstalled);
99 static void vboxUsbHookRequestRegisterCompletion(PVBOXUSBHOOK_ENTRY pHook, PDEVICE_OBJECT pDevObj, PIRP pIrp, PIO_COMPLETION_ROUTINE pfnCompletion, PVBOXUSBHOOK_REQUEST pRequest)
107 pRequest->pHook = pHook;
117 KeAcquireSpinLock(&pHook->Lock, &oldIrql);
118 InsertTailList(&pHook->RequestList, &pRequest->ListEntry);
119 KeReleaseSpinLock(&pHook->Lock, oldIrql);
122 NTSTATUS VBoxUsbHookRequestPassDownHookCompletion(PVBOXUSBHOOK_ENTRY pHook, PDEVICE_OBJECT pDevObj, PIRP pIrp, PIO_COMPLETION_ROUTINE pfnCompletion, PVBOXUSBHOOK_REQUEST pRequest)
125 vboxUsbHookRequestRegisterCompletion(pHook, pDevObj, pIrp, pfnCompletion, pRequest);
126 return pHook->pfnOldHandler(pDevObj, pIrp);
129 NTSTATUS VBoxUsbHookRequestPassDownHookSkip(PVBOXUSBHOOK_ENTRY pHook, PDEVICE_OBJECT pDevObj, PIRP pIrp)
131 return pHook->pfnOldHandler(pDevObj, pIrp);
134 NTSTATUS VBoxUsbHookRequestMoreProcessingRequired(PVBOXUSBHOOK_ENTRY pHook, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVBOXUSBHOOK_REQUEST pRequest)
141 NTSTATUS VBoxUsbHookRequestComplete(PVBOXUSBHOOK_ENTRY pHook, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVBOXUSBHOOK_REQUEST pRequest)
163 KeAcquireSpinLock(&pHook->Lock, &oldIrql);
165 KeReleaseSpinLock(&pHook->Lock, oldIrql);
171 VOID VBoxUsbHookVerifyCompletion(PVBOXUSBHOOK_ENTRY pHook, PVBOXUSBHOOK_REQUEST pRequest, PIRP pIrp)
174 KeAcquireSpinLock(&pHook->Lock, &oldIrql);
175 for (PLIST_ENTRY pLe = pHook->RequestList.Flink; pLe != &pHook->RequestList; pLe = pLe->Flink)
184 KeReleaseSpinLock(&pHook->Lock, oldIrql);