IoSetOplockPrivateFoExt

NTSTATUS __fastcall IoSetOplockPrivateFoExt(FILE_OBJECT *a1, INT64 a2){
  int v2; 
  _QWORD *FileObjectExtension; 
  char v5; 
  void *v6; 
  NTSTATUS result; 
  _OWORD *v8; 
  VOID *FoExt; 
  v2 = 0;
  FoExt = 0i64;
  if( !a1->FileObjectExtension )
  {
    result = IopAllocateFileObjectExtension(a1, &FoExt);
    v2 = result;
    if( result < 0 )
      return result;
    goto LABEL_9;
  }
  FileObjectExtension = IopGetFileObjectExtension(a1, FoExtTypeOplockKey, &FoExt);
  if( !FileObjectExtension )
  {
LABEL_9:
    LODWORD(v8) = ExAllocateFromNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)IopOplockFoExtLookasideList);
    FileObjectExtension = v8;
    if( !v8 )
      return -1073741670;
    v5 = 1;
    *v8 = 0i64;
    v8[1] = 0i64;
    v8[2] = 0i64;
  }
  FileObjectExtension[5] = *(_QWORD *)(a2 + 40);
  if( v5 )
  {
    v2 = IopSetTypeSpecificFoExtension((_IOP_FILE_OBJECT_EXTENSION *)FoExt, FoExtTypeOplockKey, FileObjectExtension);
    if( v2 < 0 )
      ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)IopOplockFoExtLookasideList, v6);
  }
  return v2;
}

Referenced by:

No references.