IoSetOplockKeyContext

NTSTATUS __stdcall IoSetOplockKeyContext(_FILE_OBJECT *FileObject, PVOID OplockKeyContext, UINT16 OplockKeyVersion){
  int v4; 
  NTSTATUS result; 
  _OWORD *v6; 
  __int128 v7; 
  __int128 v8; 
  NTSTATUS v9; 
  void *v10; 
  PVOID FoExt; 
  FoExt = 0i64;
  v4 = OplockKeyVersion;
  if( (unsigned __int16)(OplockKeyVersion - 1) > 1u )
    return -1073741811;
  if( FileObject->FileObjectExtension )
  {
    IopGetFileObjectExtension(FileObject, FoExtTypeOplockKey, &FoExt);
  }
  else
  {
    result = IopAllocateFileObjectExtension(FileObject, &FoExt);
    if( result < 0 )
      return result;
  }
  LODWORD(v6) = ExAllocateFromNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)IopOplockFoExtLookasideList);
  if( !v6 )
    return -1073741670;
  *v6 = 0i64;
  v6[1] = 0i64;
  v6[2] = 0i64;
  *(_WORD *)v6 = v4;
  if( v4 == 1 )
  {
    v8 = *(_OWORD *)OplockKeyContext;
  }
  else
  {
    if( v4 != 2 )
      goto LABEL_12;
    if( *((_BYTE *)OplockKeyContext + 32) )
    {
      v7 = *(_OWORD *)OplockKeyContext;
      *((_WORD *)v6 + 1) |= 1u;
      *(_OWORD *)((char *)v6 + 4) = v7;
    }
    if( !*((_BYTE *)OplockKeyContext + 33) )
      goto LABEL_12;
    v8 = *((_OWORD *)OplockKeyContext + 1);
  }
  *((_WORD *)v6 + 1) |= 2u;
  *(_OWORD *)((char *)v6 + 20) = v8;
LABEL_12:
  v9 = IopSetTypeSpecificFoExtension((_IOP_FILE_OBJECT_EXTENSION *)FoExt, FoExtTypeOplockKey, v6);
  if( v9 == -1073741823 )
    ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)IopOplockFoExtLookasideList, v10);
  return v9;
}

Referenced by:

FsRtlCheckOplockEx2
FsRtlpAttachOplockKey