【问题标题】:How to close a SYSTEM_HANDLE (or some open file handle in another process)如何关闭 SYSTEM_HANDLE(或另一个进程中的某些打开的文件句柄)
【发布时间】:2014-12-26 01:21:26
【问题描述】:

我正在尝试创建一个关闭其他进程的打开文件句柄的应用程序。除了这会导致应用程序不稳定之外,我还想继续这个练习。我已经成功地枚举了使用this example (download link) 对特定文件具有打开句柄或锁定的进程。简而言之,我只剩下一个 SYSTEM_HANDLE 对象或它的副本(HANDLE 类型):

SYSTEM_HANDLE handle = handleInfo->Handles[i];
HANDLE dupHandle = NULL;
if (!NT_SUCCESS(NtDuplicateObject(processHandle, (HANDLE)handle.Handle, GetCurrentProcess(), &dupHandle, 0, 0, 0)))
{
    continue;
}

我尝试关闭SYSTEM_HANDLE,但没有成功:

wcout << "Found " << fullPath << " in process " << process << "." << endl;
if (CloseHandle((HANDLE)handle.Handle))
{
    wcout << "Closed handle successfully." << endl;
}

SYSTEM_HANDLE 结构定义为:

typedef struct _SYSTEM_HANDLE
{
    ULONG ProcessId;
    BYTE ObjectTypeNumber;
    BYTE Flags;
    USHORT Handle;
    PVOID Object;
    ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE, *PSYSTEM_HANDLE;

应用程序对我撒谎,因为它打印出"Closed handle successfully.",但是当我再次枚举它的打开句柄时,这个句柄出现了。例如,如果我使用像LockHunter 这样的应用程序来关闭句柄,如果我再次枚举它,它就不会出现。如何关闭此句柄?

【问题讨论】:

  • @RaymondChen 这个问题太宽泛了,不能重复。标题为“删除被另一个进程锁定的文件”,这是一个非常开放的问题,如果这是 Stack 上这个主题的唯一内容,那么没有多少人会找到他们正在寻找的东西。问题本身是这样写的,“......也许有人以前遇到过这种情况,你可以给我/我们一个关于绕过测试代码锁定的可能方法的例子”;也许只有我一个人,但要绕过锁,你可以做很多事情,比如终止一个锁的过程等等,所以我不能把这个问题看作是一个重复的问题。
  • 建议副本中的问题是“如何关闭另一个进程中的句柄?”这也是你想要做的。
  • @RaymondChen 不是那样的措辞。这就是您解释问题的方式。
  • 不确定您的 cmets 与关闭手柄有什么关系。我认为你应该开始一个新问题。

标签: c++ .net visual-c++ process handle


【解决方案1】:

我应该更好地阅读我自己的链接,正如 wj32 明确指出的那样:

(第三步:关闭远程句柄) 关闭其他人打开的句柄 进程,您只需使用 DUPLICATE_CLOSE_SOURCE 调用 DuplicateHandle (1) 在 options 参数中指定(它记录在 MSDN DuplicateHandle 的页面,所以去阅读它)。您可以将 NULL 指定为 目标进程句柄和目标句柄参数。例如:

DuplicateHandle(handleToTheRemoteProcess, theRemoteHandle, NULL, NULL, 0, 假, 0x1);

虽然就我而言,从代码来看,如果我传入 DUPLICATE_CLOSE_SOURCE,NtDuplicateObject 应该会做同样的事情。

【讨论】:

  • 刚刚测试过,它可以工作:NtDuplicateObject(processHandle, (HANDLE)handle.Handle, 0, 0, 0, 0, 1);
猜你喜欢
  • 2012-01-31
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多