CcDeferWrite

VOID __stdcall CcDeferWrite(
        PFILE_OBJECT FileObject,
        PCC_POST_DEFERRED_WRITE PostRoutine,
        PVOID Context1,
        PVOID Context2,
        ULONG BytesToWrite,
        BOOLEAN Retrying){
  char *PoolWithTag; 
  INT64 PartitionFromFileObject; 
  KSPIN_LOCK *v12; 
  _LIST_ENTRY *v13; 
  _LIST_ENTRY *v14; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  KLOCK_QUEUE_HANDLE v16; 
  memset(&LockHandle, 0, sizeof(LockHandle));
  memset(&v16, 0, sizeof(v16));
  PoolWithTag = (char *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x60ui64, 0x77446343ui64);
  if( PoolWithTag )
  {
    KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
    PartitionFromFileObject = CcGetPartitionFromFileObject((INT64)FileObject);
    if( _InterlockedIncrement64((volatile signed __int64 *)(PartitionFromFileObject + 968)) <= 1 )
      __fastfail(0xEu);
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    if( _InterlockedIncrement64((volatile signed __int64 *)(PartitionFromFileObject + 968)) <= 1 )
      __fastfail(0xEu);
    v12 = (KSPIN_LOCK *)(PartitionFromFileObject + 832);
    *((_QWORD *)PoolWithTag + 5) = 0i64;
    v13 = (_LIST_ENTRY *)(PoolWithTag + 24);
    v14 = (_LIST_ENTRY *)(PartitionFromFileObject + 784);
    *((_QWORD *)PoolWithTag + 1) = FileObject;
    *((_DWORD *)PoolWithTag + 4) = BytesToWrite;
    *((_QWORD *)PoolWithTag + 9) = PartitionFromFileObject;
    *(_DWORD *)PoolWithTag = 6292220;
    *((_QWORD *)PoolWithTag + 6) = PostRoutine;
    *((_QWORD *)PoolWithTag + 7) = Context1;
    *((_QWORD *)PoolWithTag + 8) = Context2;
    *((_QWORD *)PoolWithTag + 11) = KUSER_SHARED_DATA.TickCountQuad;
    PoolWithTag[80] = 0;
    if( Retrying )
      ExInterlockedInsertHeadList(v14, v13, v12);
    else
      ExInterlockedInsertTailList(v14, v13, v12);
    CcPostDeferredWrites();
    KeAcquireInStackQueuedSpinLock((UINT64 *)(PartitionFromFileObject + 128), &v16);
    CcScheduleLazyWriteScan(PartitionFromFileObject, 1u);
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&v16);
    __writecr8(v16.OldIrql);
    CcDereferencePartition(PartitionFromFileObject);
  }
  else
  {
    ((void(__fastcall *)(PVOID, PVOID))PostRoutine)(Context1, Context2);
  }
}

Referenced by:

No references.