有人可以给我一个高级别的解释,他们如何能够监控每一个注册表访问?
http://technet.microsoft.com/en-us/sysinternals/bb896645
足够的细节,以便我可以谷歌围绕各个子主题,并尝试编写我自己的主题?我知道他们已经使用了某种dll注入/ API挂钩,但我不确定他们是如何达到所有内核模式活动的.
我正在使用代理DLL来拦截对CreateWindowExA/的CreateWindowExW调用.除了某些应用程序(最值得注意的是一些Visual Basic 6应用程序)似乎能够创建窗口而不通过这两个函数中的任何一个之外,这样可以很好地退出.像Spy ++这样的工具能够显示Window,但我的钩子函数没有注意到它们.
我的第一个怀疑是这些(旧的)应用程序可能使用CreateWindowA/CreateWindowW创建窗口,但至少对于我的编译器(MSVC6到MSVC10),CreateWindow它只是一个#define; 文件的备注部分证实了这一点.
我的第二个想法是,我可以一个也许安装CBT hook使用SetWindowsHookEx检测窗口的创作.但是,结果是一样的:这个钩子注意到与我的钩子API函数相同的窗口,但它没有注意到Spy ++中可见的所有窗口.
所以我的问题是:是否有时间CreateWindowA/CreateWindowW不是#define,而是真正的功能?此功能是否仍然可以导出user32.dll,可能是出于兼容性原因?如何处理此函数以挂钩它?
或者是否可能有一些其他的,可能没有文档的函数可用于创建函数,就像NtCreateProcess可以用来代替CreateProcess?
我记得在我最后一年的大学项目中我编写了一个C#注册表监视器,然而,当我将它与Microsoft ProcessMonitor应用程序进行比较时(我记不清它的确切名称,但是它是由MSoft收购的公司),我没有捕获尽可能多的注册表调用.
这是因为我使用的是C#包装器,因此它只会捕获用户模式注册表访问吗?
我使用了这个包装器:http://www.codeproject.com/KB/DLL/EasyHook64.aspx
为了捕获内核模式注册表访问,我必须用C++编写?
问候StackOverflowians,
正如此处所发现的,Windows 7具有一个错误,在该错误中,Windows资源管理器实例不会触发DISPID_BEFORENAVIGATE2事件.此事件允许在即将进行导航时通知shell扩展,并且(对我来说最重要的)有机会取消导航.我已经找了很长时间的解决方法,我想我找到了一个.但是,我想对它的安全性有一些看法.
我最近一直在玩API挂钩,我已经用它来为我的扩展程序挂钩一些函数了.我注意到IShellBrowser中有一个控制导航的功能.起初我以为你不能挂钩这样的东西,但在阅读COM对象的布局后,我意识到应该可以通过从任何活动实例的vtable中抓取正确的函数指针来实现.果然,它像梦一样.设置挂钩后,所有资源管理器窗口中的所有导航都会在我的绕行功能中运行,我可以根据目标pidl决定是否拒绝它们.
所以我的问题是,我有什么理由不这样做吗?我从来没有听说过用于挂钩COM对象函数的API钩子.是否存在不起作用的情况?危险吗?(至少比常规的API挂钩更多)
相关代码如下.我正在使用MinHook,这是一个简约的挂钩库,它使用了经过验证的蹦床功能方法.
typedef HRESULT (WINAPI *BROWSEOBJECT)(IShellBrowser*, PCUIDLIST_RELATIVE, UINT);
HRESULT WINAPI DetourBrowseObject(IShellBrowser* _this, PCUIDLIST_RELATIVE pidl, UINT wFlags);
BROWSEOBJECT fpBrowseObject = NULL;
BROWSEOBJECT ShellBrowser_BrowseObject = NULL;
bool Initialize() {
if(MH_Initialize() != MH_OK) {
return false;
}
// Get a reference to an existing IShellBrowser. Any instance will do.
// ShellBrowser enum code taken from The Old New Thing
IShellWindows *psw;
BOOL fFound = FALSE;
if (SUCCEEDED(CoCreateInstance(CLSID_ShellWindows, …Run Code Online (Sandbox Code Playgroud) 我正在使用C++/x86 asm制作RPG游戏.我的问题与C++组件有关.在C++/win32中,我如何检测计算机是关闭还是关闭,或者其他什么 - 以便我可以保存游戏会话.我的游戏有一个"保存"选项,但如果用户或其他程序决定关闭计算机,我如何通过某种API挂钩检测到这一点,这样我就可以立即将游戏会话保存到文本文件中.
现在请不要建议一个选项,通过创建一个被动运行的线程,因为我想保持文件大小最小,所以如果你可以建议某种WM_钩子,这将是伟大的.我会参考MSDN,但我不想通过他们的WM目录搜索数小时.
我需要开发一个应用程序来监视并可能过滤(拒绝调用)文件操作。
看来开发微型过滤器是“标准”解决方案。另一种可能的方法是使用 API 挂钩。
这些是相关的解决方案吗?(我在某些地方读到 API 挂钩可能不合适 - 但没有给出解释)
还有其他选择吗?
对于我正在开发的一个小项目,我需要阻止“.exe”文件运行并知道尝试运行的文件的路径。也许 Windows API 挂钩可以帮助我,但我不确定,而且我还没有使用过它。
谁能指导我如何做到这一点,可能是通过 API 挂钩?