Exemple #1
0
        private static void GetFileNameFromHandle(object state)
        {
            FileNameFromHandleState s = (FileNameFromHandleState)state;

            s.RetValue = GetFileNameFromHandle(s.Handle, out string fileName);
            s.FileName = fileName;
            s.Set();
        }
 private string GetObjectNameFromHandle(IntPtr handle)
 {
     using (FileNameFromHandleState f = new FileNameFromHandleState(handle))
     {
         ThreadPool.QueueUserWorkItem(GetObjectNameFromHandle, f);
         f.WaitOne(10);
         return(f.FileName);
     }
 }
        private static void GetFileNameOfLocalHandle(object state)
        {
            FileNameFromHandleState s = (FileNameFromHandleState)state;
            string fileName;

            s.RetValue = GetFileNameOfLocalHandle(s.Handle, out fileName);
            s.FileName = fileName;
            if (s.IsWaiting)
            {
                s.Set();
            }
        }
Exemple #4
0
 private static bool GetFileNameFromHandle(IntPtr handle, out string fileName, int wait)
 {
     using (var f = new FileNameFromHandleState(handle)) {
         ThreadPool.QueueUserWorkItem(new WaitCallback(GetFileNameFromHandle), f);
         if (f.WaitOne(wait))
         {
             fileName = f.FileName;
             return(f.RetValue);
         }
         else
         {
             fileName = string.Empty;
             return(false);
         }
     }
 }
 private static bool GetFileNameOfLocalHandle(IntPtr handle, out string fileName, int milisecondsTimeout)
 {
     using (FileNameFromHandleState state = new FileNameFromHandleState(handle))
     {
         ThreadPool.QueueUserWorkItem(new WaitCallback(GetFileNameOfLocalHandle), state);
         if (state.WaitOne(milisecondsTimeout))
         {
             fileName = state.FileName;
             return(state.RetValue);
         }
         else
         {
             fileName = string.Empty;
             return(false);
         }
     }
 }
Exemple #6
0
        private static void GetObjectNameFromHandleFunc(object obj)
        {
            FileNameFromHandleState state = obj as FileNameFromHandleState;

            int       guessSize = 1024;
            NT_STATUS ret;

            IntPtr ptr = Marshal.AllocHGlobal(guessSize);

            try
            {
                while (true)
                {
                    ret = NativeMethods.NtQueryObject(state.Handle,
                                                      OBJECT_INFORMATION_CLASS.ObjectNameInformation, ptr, guessSize, out int requiredSize);

                    if (ret == NT_STATUS.STATUS_INFO_LENGTH_MISMATCH)
                    {
                        Marshal.FreeHGlobal(ptr);
                        guessSize = requiredSize;
                        ptr       = Marshal.AllocHGlobal(guessSize);
                        continue;
                    }

                    if (ret == NT_STATUS.STATUS_SUCCESS)
                    {
                        OBJECT_NAME_INFORMATION oti = (OBJECT_NAME_INFORMATION)Marshal.PtrToStructure(ptr, typeof(OBJECT_NAME_INFORMATION));
                        state.FileName = oti.Name.GetText();
                        return;
                    }

                    break;
                }
            }
            finally
            {
                if (ptr != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(ptr);
                }

                state.Set();
            }
        }