IopGetSetSpecificExtension

VOID __fastcall IopGetSetSpecificExtension(
        _FILE_OBJECT *FileObject,
        _FILE_OBJECT_EXTENSION_TYPE Type,
        UINT64 Size,
        UINT8 SetOperation,
        VOID **TypeExt,
        VOID **FoExt){
  UINT64 v7; 
  int v10; 
  VOID *v11; 
  __int64 v12; 
  _IOP_FILE_OBJECT_EXTENSION *v13; 
  void *v14; 
  VOID **Pool_0; 
  _IOP_FILE_OBJECT_EXTENSION *FileObjectExtension; 

  FileObjectExtension = 0i64;
  v7 = (unsigned int)Size;
  if( !SetOperation || (IopAllocateFileObjectExtension(FileObject, 0i64), v10 >= 0) )
  {
    v11 = IopGetFileObjectExtension(FileObject, Type, (VOID **)&FileObjectExtension);
    v13 = FileObjectExtension;
    v14 = v11;
    if( !v11 && SetOperation )
    {
      Pool_0 = IopVerifierExAllocatePool_0(v12, v7);
      v14 = Pool_0;
      if( !Pool_0 )
        return;
      memset(Pool_0, 0i64, v7);
      if( IopSetTypeSpecificFoExtension(v13, Type, v14) < 0 )
      {
        ExFreePoolWithTag(v14, 0);
        v14 = IopGetFileObjectExtension(FileObject, Type, 0i64);
      }
    }
    if( TypeExt )
      *TypeExt = v14;
    if( FoExt )
      *FoExt = v13;
  }
}

Referenced by:

IoCopyDeviceObjectHint
IoCreateStreamFileObjectEx2
IopAdjustFileObjectKeepAliveCount
IopAllocateFoExtensionsOnCreate
IopCheckInitiatorHint
IopGetSetStreamIdentifier
IopParseDevice
IopRetrieveTransactionParameters
IopSetLockOperationProcess