PpDevNodeUnlockTree

VOID __stdcall PpDevNodeUnlockTree(PNP_LOCK_LEVEL LockLevel){
  _ERESOURCE *v1; 
  __int32 v2; 
  __int32 v3; 
  __int32 v4; 

  if( LockLevel == PPL_SIMPLE_READ )
  {
    v1 = (_ERESOURCE *)((char *)&PnpReplaceEvent + 6048);
LABEL_3:
    ExReleaseResourceLite(v1);
    goto LABEL_4;
  }
  v2 = LockLevel - 1;
  if( !v2 || (v3 = v2 - 1) == 0 || (v4 = v3 - 1) == 0 )
  {
    ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 6048));
    v1 = (_ERESOURCE *)((char *)&PnpReplaceEvent + 6400);
    goto LABEL_3;
  }
  if( v4 == 1 )
    ExConvertExclusiveToSharedLite((_ERESOURCE *)((char *)&PnpReplaceEvent + 6048));
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