IoFreeSfioStreamIdentifier

NTSTATUS __stdcall IoFreeSfioStreamIdentifier(_FILE_OBJECT *FileObject, VOID *Signature){
  __int64 v3; 
  void **FileObjectExtension; 
  NTSTATUS v5; 
  UINT64 *v6; 
  unsigned __int8 v7; 
  VOID **v8; 
  unsigned __int64 v9; 
  void **v10; 
  void **v12; 

  FileObjectExtension = (void **)IopGetFileObjectExtension(FileObject, FoExtTypeSfio, 0i64);
  v5 = -1073741275;
  if( FileObjectExtension )
  {
    v6 = (UINT64 *)(v3 + 184);
    v7 = KeAcquireSpinLockRaiseToDpc((UINT64 *)(v3 + 184));
    v8 = (VOID **)*FileObjectExtension;
    v9 = v7;
    if( *FileObjectExtension != FileObjectExtension )
    {
      while( 1 )
      {
        v10 = (void **)*v8;
        if( v8[3] == Signature )
          break;
        v8 = (VOID **)*v8;
        if( v10 == FileObjectExtension )
          goto LABEL_5;
      }
      v12 = (void **)v8[1];
      if( v10[1] != v8 || *v12 != v8 )
        __fastfail(3u);
      *v12 = v10;
      v10[1] = v12;
      ExFreePoolWithTag(v8, 0);
      v5 = 0;
    }
LABEL_5:
    KxReleaseSpinLock(v6);
    __writecr8(v9);
  }
  return v5;
}

Referenced by:

No references.