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(); } }
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); } } }
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(); } }