问题标签 [ntdll]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
8166 浏览

windows - NtCreateProcess 和 ZwCreateProcess 有什么区别?

NtCreateProcess和 和有什么不一样ZwCreateProcess?在ntdll.dll中,两者都NtCreateProcess指向ZwCreateProcess完全相同的地址

0 投票
1 回答
1465 浏览

windows - NT DLL Loader 是否按照可执行文件的导入部分的顺序加载 DLL?

如果您在 Windows 上有可执行文件,则可以使用 DUMPBIN 实用程序(例如包含在 Visual Studio 中)查看其导入部分。

要获取所有导入的 DLL 的列表,您可以运行以下命令(只是一个任意示例):

我现在在另一个问题中推测对于独立的 DLL,加载器(将 DLL 映射到地址空间并调用其 DllMain 函数的组件)将按照它们在导入部分中出现的顺序加载 DLL。

注意:这显然只适用于独立的 DLL,因为加载器必须解决依赖关系,因此任何依赖于任何其他的 DLL 将始终是一个接一个的加载器。所以这个问题只能适用于独立(非系统)DLL。

继续我上面的(任意选择的)示例,

libgimpmath并且libgimpcolor在这个意义上是独立的DLL。所以这里的问题是:加载程序是否总是先加载libgimpcolorlibgimpmath因为它位于导入部分的首位?

0 投票
1 回答
5625 浏览

c# - 从另一个进程中删除互斥锁

使用主题概述 - 句柄枚举,第 5 号,尝试关闭另一个进程的互斥锁以及来自互斥锁分析的信息,煤矿中的金丝雀和发现新的恶意软件家族/,我想出了:

Attempt 1: http://pastebin.com/QU0WBgE5

您必须先打开记事本。不用说,这对我不起作用。我需要更好的错误检查来弄清楚发生了什么。我不知道如何以我在Process Explorer中看到的格式获取互斥指针。

我的目标是能够删除/杀死由进程创建的互斥体句柄,以便可以打开多个实例。我可以使用 Process Explorer 手动执行此操作,但我想以编程方式执行此操作。


(根据 Yahia 的笔记,我需要更多权限。)

Attempt 2: http://pastebin.com/yyQLhesP

至少现在我进行了某种错误检查,大多数情况下 DuplicateHandle 返回 6 或 5,这是一个无效句柄,并且访问被拒绝


工作尝试(种类):

我实际上并不需要 Yahia 最后所说的任何东西。当我需要一个远程句柄时,我得到了一个“本地”句柄。基本上,我的意思是你必须找到 HandleValueNtQuerySystemInformation并使用该句柄,而不是OpenMutex/返回的那个CreateMutex

诚然,我无法让它在某些应用程序上运行(osk.exe——在屏幕键盘上),但它适用于我想要的应用程序,发布代码以防有人想进一步使用它。

0 投票
1 回答
2297 浏览

visual-studio-2010 - NtQueryInformationProcess 在 Visual Studio 2010 中不起作用

我有一个奇怪的问题,在我必须提到我的主要编程语言是 delphi 而不是 c++ 之前我没有遇到过,我可能会犯一个愚蠢的错误并且没有意识到这一点。

我有以下代码:

我收到以下错误消息:

GetCommandArgs.obj:错误 LNK2019:未解析的外部符号 _NtQueryInformationProcess@20 在函数 _wmain 中引用

问题是什么 ?非常感谢。

0 投票
1 回答
1322 浏览

visual-studio - StyleCop 4.7 在 Visual Studio 2010 中崩溃

早晨,

不知道有没有其他人经历过以下情况。

直到今天早上,我的 Windows 7/Visual Studio 2010 Ultimate/StyleCop 4.7.11.0 设置工作正常。

然而,当我今天早上启动我的电脑,启动 Visual Studio 2010 并加载了一个在各种项目上启用了 stylecop 的解决方案时,我发现当我尝试构建任何启用了 stylecop 的项目时 IDE 崩溃了。例如 thjose 在 .csproj 中有以下条目

... 错误的

从 .csproj 文件中删除这些 StyleCop 条目或卸载 StyleCop 可以自行“修复”问题并允许我构建解决方案。但是重新安装 .csproj 文件中的 stlecop 条目并重新安装 StyleCop v4.7.11.0 或 v4.7.17.0 导致问题再次出现。

事件视图中唯一的错误是指 NTDLL.DLL

错误应用程序名称:devenv.exe,版本:10.0.40219.1,时间戳:0x4d5f2a73 错误模块名称:ntdll.dll,版本:6.1.7601.17725,时间戳:0x4ec49b8f 异常代码:0xc00000fd 错误偏移:0x0002e17c 错误进程 id:0x17d8 错误应用程序启动时间:0x01cd0cd0f8cd1730 错误应用程序路径:C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe 错误模块路径:C:\Windows\SysWOW64\ntdll.dll 报告 ID:56b93280-78c4 -11e1-bef3-001cc0c2a2ac

或一次 CLR.dll

错误应用程序名称:devenv.exe,版本:10.0.40219.1,时间戳:0x4d5f2a73 错误模块名称:clr.dll,版本:4.0.30319.239,时间戳:0x4e181a6d 异常代码:0xc00000fd 错误偏移:0x00038b13 错误进程 id:0x14c8 错误应用程序启动时间:0x01cd0cbf6cf79511 错误应用程序路径:c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe 错误模块路径:C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr .dll 报告 ID:c82f5abd-78b2-11e1-b990-001cc0c2a2ac

0 投票
1 回答
7527 浏览

c++ - Win32环境下从ntdll.dll调用Nt函数,C++

我想从 ntdll.dll 调用一些 Nt 函数,我正在像上面那样做。

对于调用: NtTestAlert() ,您需要典型的 ntcall 内核例程,可通过 int 2Eh 访问。(从这里我得到了 Nt 函数http://undocumented.ntinternals.net/

代码也未完成,我得到:

*错误C2664:'_ ntcall':无法将参数1从'int'转换为'MESS( _stdcall )'

0 投票
1 回答
3397 浏览

windows - Windows 注册表,如何添加您的本机程序以进行启动执行?

我已经为 Windows 完成了本机程序。

(其中,我已经编译#pragma comment(linker, "/SUBSYSTEM:NATIVE"))。

我想将我的程序添加到自动执行列表中,我该怎么做?

我的确切问题是:

1)。我怎么能在 Windows 注册表中做到这一点(我已经用谷歌搜索了 BootExecute/SetupExecute 表,但安装程序是空的,并且 BootExecute 只有:*autocheck autochk **)。所以我对空表感到困惑(原因,如果它是空的,那么 Windows 中另一个自动执行程序在哪里,ntdll.dll 会加载哪个?)

2)。可执行程序的版本是否重要:对于 32/64 位系统

我把它放在%windir%\system32中,但也有%windir%\WOW64文件夹。

我应该在注册表中突出显示这个细节,还是 Windows 从两个文件夹中加载每个驱动程序,然后在 taskmgr 中简单地将它们突出显示为*32或 64 位程序?

3)。有没有其他方法可以做到这一点?

0 投票
1 回答
759 浏览

command-line - NtQueryInformationProcess 似乎返回错误的命令行

我正在使用NtQueryInformationProcess( ) 在 Windows 7 上检索另一个进程的命令行(通过NtQueryInformationProcess () 返回的 PEB 中的 RTL_USER_PROCESS_PARAMETERS)。

这通常可以正常工作,但是当启动同一可执行文件的多个实例时,所有实例的命令行字符串都是相同的:它始终是启动的第一个实例的命令行。GetCommandLine() 为每个进程返回正确的命令行。

有人可以证实或伪造这一点吗?

0 投票
1 回答
340 浏览

c++ - POCO中找不到ntdll.dll?

当我使用 HTTPSClientSession 运行程序时,它崩溃了,因为:

然后,我跟踪堆栈,发现ntdll.dll没有加载,我对此表示怀疑。

任何想法为什么 NTDLL 看起来没有加载?

0 投票
1 回答
107 浏览

c++ - 如何确定进程打开文件的顺序?

有没有办法获取进程的所有打开文件句柄并按文件打开时间安排它?我们有一个项目,正是需要这个 - 我们需要确定哪些文件是由 Dj 软件打开的,例如 Traktor 或 Serato。我们需要知道它的顺序的原因是要确定哪个文件在第一个卡组中,哪个在第二个卡组中。

目前,我们正在使用来自 Ntdll.dll (Winternl.h) 的 Windows 内部 API 来确定进程的所有打开文件的列表。也许这不是最好的方法。任何建议都受到高度赞赏。

我们依赖于在某些操作系统版本和某些 Dj 软件版本上观察到的 API 行为,即进程的所有打开文件列表永远不会重新排列,即遵循顺序。我知道这是一种不好的做法,但这是客户在发布之前“应该”的功能,所以我们不得不这样做。现在的问题是,当这些句柄有时在没有任何特定原因的情况下随机重新排列时,我们遇到了一个错误。那会阻止一切。我想也许那些win结构中会有一个字段来获取文件的打开时间,但似乎没有这样的东西。有关该 API 的文档非常糟糕。

我想到了一些代码粘贴,但它是一个 200 行长的函数,它使用函数指针从 dll 间接调用,并且 WinAPI 的所有结构都是手动重新定义的,所以真的很难阅读。实际上,甚至没有包含 Winternl.h 标头 - 所有内容也是手动加载的,如下所示:

对于一个跨平台的应用来说,真的很头疼……

PS我在这里发布了一个相关的问题,关于任何跨平台或Qt方式来获取打开的文件句柄,也许这些东西会有用或相关。