问题标签 [nt-native-api]

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 投票
5 回答
17306 浏览

windows - Windows和本机API中的系统调用?

最近我在*NIX 操作系统中使用了大量的汇编语言。我想知道Windows域。


linux中的调用约定:

就是这样。这就是我们应该如何在 linux 中进行系统调用。

linux中所有系统调用的参考:

关于哪些 $SYS_Call_NUM 和哪些参数我们可以使用这个参考:http ://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

官方参考: http: //kernel.org/doc/man-pages/online/dir_section_2.html


Windows 中的调用约定:

???

Windows中所有系统调用的参考:

???

非官方:http ://www.metasploit.com/users/opcode/syscalls.html ,但是除非我知道调用约定,否则我如何在程序集中使用它们。

官方的 : ???

  • 如果你说,他们没有记录它。那么如何在不知道系统调用的情况下为 windows 编写 libc 呢?一个人将如何进行 Windows 汇编编程?至少在驱动程序编程中需要知道这些。对?

现在,所谓的 Native API 是怎么回事?Native API&两者是System calls for windows指同一事物的不同术语吗?为了确认我比较了来自两个非官方来源的这些

系统调用:http ://www.metasploit.com/users/opcode/syscalls.html

原生 API:http ://undocumented.ntinternals.net/aindex.html

我的观察:

  1. 所有系统调用都以字母开头Nt,因为 Native API 由许多不以字母开头的函数组成Nt
  2. System Call of windows是 的子集Native API。系统调用只是 Native API 的一部分。

任何人都可以证实这一点并解释一下。

编辑:

还有另一个答案。这是第二个答案。我真的很喜欢它,但我不知道为什么回答者删除了它。我要求他重新发布他的答案。

0 投票
2 回答
4282 浏览

c++ - 从用户模式访问 Windows Native API

我对 Windows Native API 很好奇。我一直在网上搜索,但未能找到从用户模式调用本机 API 函数的示例。我相信我已经基本掌握了这意味着什么——具体来说,我必须在我的程序中定义常量和原生 API 函数,并使用 GetProcAddress 在 ntdll.dll 中找到该函数,然后调用该函数。

这是正确的,任何人都可以引导我朝着正确的方向前进吗?示例代码会让我很开心,因为我绝对找不到。

我在这里遇到了这段代码(http://www.eggheadcafe.com/software/aspnet/31520494/native-application--ntc.aspx),但在我看来,它打算在内核模式下运行:

如何修改此代码以在用户模式下运行?我正在使用 c++,正如您可能已经推测到的那样。

提前致谢。

0 投票
1 回答
515 浏览

c++ - 是否有任何关于 Windows NT Native API 的最新书籍或网站?

NT 有一个大部分未记录的 API,称为“Native API”,在其上实现了公共子系统(即 Windows API、OS/2 API 和 POSIX(现在通常称为“ Interix ”)子系统)。

有几本书和网站试图记录这个 API:

不幸的是,没有一本书或网站可以让我尝试接触 64 位版本的 Windows(当然 WDK 除外,但 WDK 是有限的......)。API 调用本身是相同的——最大的问题与结构定义本身有关。即——指针值和 DWORD 在 32 位平台上的大小相同,但在 x64 平台上不同。因此,通常定义为 DWORD 数组的结构的“未知填充”位在 x64 窗口上是错误的 - 结果是完全垃圾。

我一直在通过手动添加额外的填充来手动解决这些问题在需要时使用指针而不是 DWORD,以便单个结构定义可以同时用于 32 位和 64 位 Windows。

这样的资源存在吗?

0 投票
1 回答
3279 浏览

windows - Windows 上 fs:[0x0] 的位置是什么?

32 位 Windows 上的 TEB 位于fs:[0x0018]. 在 fs:0 和 fs:0x18 之间的这 24 个字节中究竟找到了什么?(是的,我知道这是无证的并且可能会发生变化,但知道会很有趣......)

0 投票
2 回答
8272 浏览

windows - Windows Native API:何时以及为什么使用 Zw 与 Nt 前缀的 api 调用?

在 Native API 中,Microsoft 导出每个 api 调用的两个版本,一个以 Zw 为前缀,一个以 Nt 为前缀,例如。ZwCreateThread 和 NtCreateThread。

我的问题是这两个版本的调用有什么区别,何时以及为什么应该专门使用 Zw 或 Nt?据我了解,Zw 版本确保调用者驻留在内核模式,而 Nt 则不然。

我还想知道 Zw 和 Nt 前缀/缩写的具体含义?可以猜测 Nt 可能是指 NT(New Technology) Windows 系列还是 Native(可能不是)?至于Zw,它代表什么吗?

0 投票
2 回答
153 浏览

winapi - SIGINT 在 NT 原生 API 中翻译成什么?

Windows 在控制台应用程序中支持SIGINT以响应 Ctrl-C。这意味着 Windows 具有从远程线程(甚至是进程!)中断正在运行的线程并调用信号处理程序的功能。

这在 NT Native API 级别究竟是如何工作的?这个线程中断 API 可以用于用户空间的其他目的吗?

0 投票
1 回答
1098 浏览

winapi - 异步 NtQueryDirectoryFile?

有没有人设法弄清楚对NtQueryDirectoryFile的异步调用是如何工作的?

通过异步调用,我的意思是调用未使用FILE_SYNCHRONOUS_IO_ALERTFILE_SYNCHRONOUS_IO_NONALERT打开的NtQueryDirectoryFile目录。

对我来说,它似乎STATUS_PENDING像普通文件上的普通NtReadFile请求一样返回,但是当我尝试在目录上使用NtWaitForSingleObject时,它没有正确结束,我仍然没有得到所有数据......为什么这会发生吗?

0 投票
1 回答
4586 浏览

c++ - 有没有办法从用户模式调用 Windows Native API 函数?

我想用 C++ 从用户模式调用一些 Native API 函数。我想知道是否可以完全绕过 Windows API 接口并从用户模式直接调用 Native API 函数。

如果可能的话,任何代码示例都会非常有帮助。

0 投票
1 回答
516 浏览

windows-7 - 如何收集可能涉及驱动程序和用户模式代码的 Windows 7 死机信息?

我在应用程序中遇到崩溃,即 Windows 7 崩溃,但不是在传统的“蓝屏死机”崩溃中,当设备驱动程序或其他内核空间进程崩溃整个系统时会发生这种情况,而是我看到锁定所有用户空间进程。

这是机器的状态:

(1) Windows 鼠标移动仍然响应,Aero 合成层仍在工作(资源管理器中的某些鼠标悬停效果仍然有效),但没有 win32 进程在工作,GDI 和用户会话似乎冻结。(2) Ctrl+Alt+Delete 不调出任务管理器。(3) 没有故障转储,没有蓝屏死机。

有没有人知道任何方法来收集有关崩溃的更多信息?我知道涉及到驱动程序级别的问题,我想收集人们可以使用的设备驱动程序级别的信息。当您遇到蓝屏死机时,您可以收集内存转储 (DMP) 文件,并将它们发送给开发人员以寻求帮助。我正在寻找的是一种跟踪进程和系统状态的方法,也许可以连接内核调试器或其他东西。我从来没有做过内核调试器的工作,所以我正在寻找一种开始的方法。

我可以在 win7/32 位 VM 中轻松重现崩溃,而且我还没有安装内核调试工具。我首先想知道,如果我似乎选择了一种有价值的方法(内核调试工具?),如果是这样,我真的不知道如何使用这些工具来收集可能有助于内核模式开发人员定位问题的信息.

0 投票
1 回答
2232 浏览

c++ - 将 char 数组转换为 Unicode

我正在用 Visual C++ 开发设备驱动程序。我需要将字符数组转换为 Unicode 以及驱动程序中的宽字符数组。

指向有用功能的指针将不胜感激。我知道“RtlInitUnicodeString”,它将 wchar 与 Unicode 相协调,但需要帮助来转换简单的字符数组。