PpDevNodeUnlockTree

void __fastcall PpDevNodeUnlockTree(int a1){
  struct _ERESOURCE *v1; 
  int v2; 
  int v3; 
  int v4; 
  if( !a1 )
  {
    v1 = &IopDeviceTreeLock;
LABEL_3:
    ExReleaseResourceLite(v1);
    goto LABEL_4;
  }
  v2 = a1 - 1;
  if( !v2 || (v3 = v2 - 1) == 0 || (v4 = v3 - 1) == 0 )
  {
    ExReleaseResourceLite(&IopDeviceTreeLock);
    v1 = &PiEngineLock;
    goto LABEL_3;
  }
  if( v4 == 1 )
    ExConvertExclusiveToSharedLite(&IopDeviceTreeLock);
LABEL_4:
  KeLeaveCriticalRegion();
}

Referenced by:

IoDuplicateDependency
IoGetLegacyVetoList
IoLockUnlockPnpDeviceTree
IoReportDetectedDevice
IoReportRootDevice
IoReserveDependency
IoSetDependency
IoTranslateBusAddress
IopQueryInterfaceRecurseUp
IopRetryDeviceRemovalForReset
IopSortRelationListForRemove
IopWarmEjectDevice
PiCMCreateDevice
PiCMDeleteDevice
PiControlGetPropertyData
PiControlGetSetDeviceStatus
PiControlQueryConflictList
PiGetDeviceDepth
PiGetRelatedDevice
PiInitializeDevice
PiPagePathSetState
PiProfileUpdateDeviceTreeWorker
PiQueryDeviceRelations
PiQueryPowerDependencyRelations
PiQueryPowerRelations
PipForDeviceNodeSubtree
PipNotifyDeviceDependencyList
PipProcessDevNodeTree
PnpCheckForActiveDependencies
PnpDelayedRemoveWorker
PnpDeleteAllDependencyRelations
PnpDeviceActionWorker
PnpDiagRundownRegisterCallback
PnpGetDeviceDependencyList
PnpLockDeviceActionQueue
PnpProcessCompletedEject
PnpProcessDependencyRelations
PnpProcessQueryRemoveAndEject
PnpQueuePendingEject
PnpQueuePendingSurpriseRemoval
PnpReleaseDependencyRelationsLock
PnpRequestDeviceRemoval
PnpRestartDeviceNode
PnpStartedDeviceNodeDependencyCheck
PnpSurpriseRemoveLockedDeviceNode
PnpUnlinkDeviceRemovalRelations
PnpUnlockDeviceActionQueue
PpDevCfgProcessDevices
PpHotSwapGetDevnodeRemovalPolicy
PpResetProblemDevices