【问题标题】:Source of a HANDLE on windowswindows上一个句柄的来源
【发布时间】:2014-04-30 11:39:14
【问题描述】:

我目前正在开发一个项目(使用 C 语言),在该项目中我使用了不同的 win HANDLE(互斥量、信号量、线程......)。 我的问题是:有没有办法检索 HANDLE 链接到的内核对象的类型?类似于:Get_HANDLE_source() 或 Is_thread_HANDLE()?

谢谢,

干杯!

【问题讨论】:

  • NtQueryObject 应该可以得到你想要的
  • 为什么我对使用“此功能可能会更改或从 Windows 中删除,恕不另行通知。” ?
  • 这可能是一个 x-y 问题。您真正想要完成什么?
  • 我在 winapi 之上实现了一个 API,我只是想确保有人没有使用带有 HANDLE 的线程相关函数来处理任何其他对象。
  • @Al3xophis 然后,您可能不会暴露句柄。而是创建包含句柄的结构并为每个结构添加操作。

标签: c++ c windows winapi handle


【解决方案1】:

正如 NtQueryObject 所说。但是使用一些 OO 概念可能会更好:

struct HandleVtable
    {
    /* function pointer to appropriate implementation */

    };

struct HandleWrapper
    {
    struct HandleVtable *vptr;
    HANDLE handle;
    };

对于每种类型的句柄,创建一个静态的 const HandleVtable 并用函数指针填充它。创建 HandleWrappers 时,设置 vptr 使其指向相应的 vtable,并让所有函数调用都通过该 vtable。为此,最好编写一个包装函数,该函数接受一个指向 HandleWrapper 的指针。

现在您将在 C 中使用 OOP。

【讨论】:

  • 谢谢!没想过那样做。那可以做这项工作:)
猜你喜欢
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
相关资源
最近更新 更多