VOID drbdlockCleanupCallback( VOID ) /*++ Routine Description: Cleans up callback object. Arguments: None. Return Value: None. --*/ { if (g_pCallbackReg) ExUnregisterCallback(g_pCallbackReg); if (g_pCallbackObj) ObDereferenceObject(g_pCallbackObj); }
/** * Unload the driver. * * @param pDrvObj Driver object. */ void _stdcall VBoxDrvNtUnload(PDRIVER_OBJECT pDrvObj) { PSUPDRVDEVEXT pDevExt = (PSUPDRVDEVEXT)pDrvObj->DeviceObject->DeviceExtension; Log(("VBoxDrvNtUnload at irql %d\n", KeGetCurrentIrql())); /* Clean up the power callback registration. */ if (pDevExt->hPowerCallback) ExUnregisterCallback(pDevExt->hPowerCallback); if (pDevExt->pObjPowerCallback) ObDereferenceObject(pDevExt->pObjPowerCallback); /* * We ASSUME that it's not possible to unload a driver with open handles. * Start by deleting the symbolic link */ UNICODE_STRING DosName; RtlInitUnicodeString(&DosName, DEVICE_NAME_DOS); NTSTATUS rc = IoDeleteSymbolicLink(&DosName); /* * Terminate the GIP page and delete the device extension. */ supdrvDeleteDevExt(pDevExt); RTR0Term(); IoDeleteDevice(pDrvObj->DeviceObject); }
void deregister_power_callback(PDEV_EXT ext) { if (ext->CbRegistration) ExUnregisterCallback(ext->CbRegistration); if (ext->CbObject) ObDereferenceObject(ext->CbObject); }
// Unregister power callback _Use_decl_annotations_ void PowerCallbackTermination() { PAGED_CODE(); if (g_pcp_registration) { ExUnregisterCallback(g_pcp_registration); } if (g_pcp_callback_object) { ObDereferenceObject(g_pcp_callback_object); } }
VOID ndisprotUnregisterExCallBack() { DEBUGP(DL_LOUD, ("--> ndisprotUnregisterExCallBack\n")); PAGED_CODE(); if (CallbackRegisterationHandle) { ExUnregisterCallback(CallbackRegisterationHandle); CallbackRegisterationHandle = NULL; } if (CallbackObject) { ObDereferenceObject(CallbackObject); CallbackObject = NULL; } DEBUGP(DL_LOUD, ("<-- ndisprotUnregisterExCallBack\n")); }
/** * Unload the driver. * * @param pDrvObj Driver object. */ void _stdcall VBoxDrvNtUnload(PDRIVER_OBJECT pDrvObj) { PSUPDRVDEVEXT pDevExt = (PSUPDRVDEVEXT)g_pDevObjSys->DeviceExtension; Log(("VBoxDrvNtUnload at irql %d\n", KeGetCurrentIrql())); /* Clean up the power callback registration. */ if (pDevExt->hPowerCallback) ExUnregisterCallback(pDevExt->hPowerCallback); if (pDevExt->pObjPowerCallback) ObDereferenceObject(pDevExt->pObjPowerCallback); /* * We ASSUME that it's not possible to unload a driver with open handles. */ supdrvDeleteDevExt(pDevExt); RTR0Term(); vboxdrvNtDestroyDevices(); NOREF(pDrvObj); }
VOID NTAPI CmBattUnload(IN PDRIVER_OBJECT DriverObject) { if (CmBattDebug & CMBATT_GENERIC_INFO) DPRINT("CmBattUnload: \n"); /* Check if we have a registered power callback */ if (CmBattPowerCallBackObject) { /* Get rid of it */ ExUnregisterCallback(CmBattPowerCallBackRegistration); ObDereferenceObject(CmBattPowerCallBackObject); } /* Free the registry buffer if it exists */ if (GlobalRegistryPath.Buffer) ExFreePool(GlobalRegistryPath.Buffer); /* Make sure we don't still have references to the DO */ if ((DriverObject->DeviceObject) && (CmBattDebug & CMBATT_GENERIC_WARNING)) { DbgPrint("Unload called before all devices removed.\n"); } }
_IRQL_requires_same_ VOID UnregisterPowerStateChangeCallback(_Inout_ DEVICE_EXTENSION* pDeviceExtension) { #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " ---> UnregisterPowerStateChangeCallback()\n"); #endif /// DBG NT_ASSERT(pDeviceExtension); if(pDeviceExtension->pRegistration) { ExUnregisterCallback(pDeviceExtension->pRegistration); pDeviceExtension->pRegistration = 0; } if(pDeviceExtension->pCallbackObject) { ObDereferenceObject(pDeviceExtension->pCallbackObject); pDeviceExtension->pCallbackObject = 0; } #if DBG DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, " <--- UnregisterPowerStateChangeCallback()\n"); #endif /// DBG return; }
BOOLEAN ndisprotRegisterExCallBack() { OBJECT_ATTRIBUTES ObjectAttr; UNICODE_STRING CallBackObjectName; NTSTATUS Status; BOOLEAN bResult = TRUE; DEBUGP(DL_LOUD, ("--> ndisprotRegisterExCallBack\n")); PAGED_CODE(); do { RtlInitUnicodeString(&CallBackObjectName, NDISPROT_CALLBACK_NAME); InitializeObjectAttributes(&ObjectAttr, &CallBackObjectName, OBJ_CASE_INSENSITIVE | OBJ_PERMANENT, NULL, NULL); Status = ExCreateCallback(&CallbackObject, &ObjectAttr, TRUE, TRUE); if (!NT_SUCCESS(Status)) { DEBUGP(DL_ERROR, ("RegisterExCallBack: failed to create callback %lx\n", Status)); bResult = FALSE; break; } CallbackRegisterationHandle = ExRegisterCallback(CallbackObject, ndisprotCallback, (PVOID)NULL); if (CallbackRegisterationHandle == NULL) { DEBUGP(DL_ERROR,("RegisterExCallBack: failed to register a Callback routine%lx\n", Status)); bResult = FALSE; break; } ExNotifyCallback(CallbackObject, (PVOID)CALLBACK_SOURCE_NDISPROT, (PVOID)NULL); }while(FALSE); if(!bResult) { if (CallbackRegisterationHandle) { ExUnregisterCallback(CallbackRegisterationHandle); CallbackRegisterationHandle = NULL; } if (CallbackObject) { ObDereferenceObject(CallbackObject); CallbackObject = NULL; } } DEBUGP(DL_LOUD, ("<-- ndisprotRegisterExCallBack\n")); return bResult; }