KseShimDatabaseOpen

NTSTATUS __stdcall KseShimDatabaseOpen(PVOID *DbHandleOut){
  _ETHREAD *CurrentThread; 
  int v3; 
  char v4; 
  INT64 v6; 
  INT64 v7; 
  WCHAR v8; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockExclusiveEx((UINT64)&KsepShimDbLock, 0i64);
  if( KsepShimDbDuringBoot )
  {
    if( KsepShimDbHandle )
    {
      ++KsepShimDbRefCount;
      v3 = 0;
      *DbHandleOut = (PVOID)KsepShimDbHandle;
      _InterlockedIncrement(&dword_140C2A7D0);
      goto LABEL_4;
    }
    *DbHandleOut = 0i64;
LABEL_15:
    v3 = -1073741823;
    goto LABEL_4;
  }
  if( KsepShimDbHandle )
  {
    ++KsepShimDbRefCount;
    v3 = 0;
    *DbHandleOut = (PVOID)KsepShimDbHandle;
    _InterlockedIncrement(&dword_140C2A7D8);
    goto LABEL_4;
  }
  v3 = KsepSdbMapToMemory(L"\\SystemRoot\\AppPatch\\drvmain.sdb");
  if( v3 < 0 )
  {
    *DbHandleOut = 0i64;
    _InterlockedIncrement(&dword_140C2A7DC);
    goto LABEL_15;
  }
  if( KsepSdbMapToMemory(L"\\SystemRoot\\AppPatch\\drvpatch.sdb") >= 0
    && dword_140C2ACD0 >= (unsigned int)dword_140C2AD08 )
  {
    KsepSdbUnmapFromMemory((INT64)&qword_140C2ACD8);
    KsepDeletePatchSdb(v7, v6, v8);
  }
  ++KsepShimDbRefCount;
  KsepShimDbHandle = (__int64)&KsepShimDb;
  *DbHandleOut = &KsepShimDb;
  _InterlockedIncrement(&dword_140C2A7D4);
LABEL_4:
  v4 = _InterlockedExchangeAdd64((volatile signed __int64 *)&KsepShimDbLock, 0xFFFFFFFFFFFFFFFFui64);
  if( (v4 & 2) != 0 && (v4 & 4) == 0 )
    ExfTryToWakePushLock((volatile INT64 *)&KsepShimDbLock);
  KeAbPostRelease(&KsepShimDbLock);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return v3;
}

Referenced by:

KseInitialize
KsepDbCacheReadDevice
KsepDbGetDriverShims
KsepDbGetShimInfo