问题标签 [windows-nt]
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.
c++ - 是否有任何关于 Windows NT Native API 的最新书籍或网站?
NT 有一个大部分未记录的 API,称为“Native API”,在其上实现了公共子系统(即 Windows API、OS/2 API 和 POSIX(现在通常称为“ Interix ”)子系统)。
有几本书和网站试图记录这个 API:
- 其中一些函数记录在Windows 驱动程序工具包中
- 未记录的 Windows 2000 秘密,程序员食谱,作者 Sven V. Schreiber
- 未记录的内部人员
- Windows NT/2000 本机 API 参考,作者 Gary Nebbett
- NirSoft 的 Windows Vista 内核结构
不幸的是,没有一本书或网站可以让我尝试接触 64 位版本的 Windows(当然 WDK 除外,但 WDK 是有限的......)。API 调用本身是相同的——最大的问题与结构定义本身有关。即——指针值和 DWORD 在 32 位平台上的大小相同,但在 x64 平台上不同。因此,通常定义为 DWORD 数组的结构的“未知填充”位在 x64 窗口上是错误的 - 结果是完全垃圾。
我一直在通过手动添加额外的填充来手动解决这些问题在需要时使用指针而不是 DWORD,以便单个结构定义可以同时用于 32 位和 64 位 Windows。
这样的资源存在吗?
windows - 我拥有我的控制台还是从父母那里继承了它?
NT 字符模式应用程序如何确定其控制台是否继承自父进程,而不是 CreateProcess 中新分配的控制台?
哇,这么不受欢迎的标签!添加窗口以吸引合适的程序员
@anonymous downvoter:我只能根据一些反馈对这个问题进行有限的扩展。说明不清楚的地方(但是需要熟悉 Windows 内核和子系统)。请记住,我们这里的很多人都是程序员,所以我们的幽默是非常具体的,不要对标题双关语判断太苛刻。
kernel - 命令和程序如何与 Window OS 通信
为 Windows 编写的程序如何与 Windows NT 内核交互或向其发出命令?
内核如何返回任何数据?
windows-ce - MMF(独占/非共享内存映射文件)
我们的应用程序在 WinCE5.0 上运行(用 .net cf 编写)
由于某些原因,我们必须创建 MMF 文件供我们的应用程序使用(MMF 文件只能由我们的应用程序使用)。
现在我们注意到,在随机时间(我们无法准确找到何时以及在何种情况下)MMF 文件被其他进程使用,该进程将数据写入其上。这使我们的 MMF 文件损坏。
请让我们知道如何避免这种情况。
换句话说,我们希望 MMF 专门用于我们的应用程序,而不是共享。
谢谢。
win32-process - 两个进程读取/写入同一个文件 - Win32 使用 LockFileEx() 函数
我正在编写一个服务,它将创建一个文件并在其中写入记录,其他进程(有四个并发进程)将读取一条记录并修改它的一些值。我目前正在使用LockFileEx()
和UnLockFileEx()
功能进行排序。
我正在使用 createFile 函数通过我的服务创建文件,如下所示
和其他进程获取文件的句柄,如下所示:
问题是两个或多个进程无法同时获取文件的句柄。当一个进程正在写入文件时,即使我正在使用LockFileEx()
锁定文件指定区域而不是完整文件的函数,其他进程甚至无法获取文件句柄来读取文件。每次尝试通过设置FILE_SHARED_READ
标志打开文件或尝试以独占方式打开文件时,我都会收到系统错误代码 32。当我设置FILE_SHARE_READ | FILE_SHARE_WRITE
时,会发生死锁。
请告诉我任何解决方案,以便我可以通过多个进程打开文件。
谢谢!!
windows - 我是否发现了 Windows 错误?
使用“C:\Program Files (x86)”时,我遇到了一个奇怪的问题,即位于该路径下方某处的程序。我用测试程序重现了这种行为。
该程序计算并返回所有命令行参数(包括用于标识程序的程序路径)。我把它命名为“HelloWorld.exe”,因为我很着急。
对于运行程序的三种可能方式,它给出了两种不同的结果,而我期望得到相同的结果。
当我从自己的目录运行 HelloWorld.exe 时,输出是
该输出是正确且符合预期的。
当我从另一个位置运行位于“P:\Test (x86)”中的 HelloWorld.exe 并使用引用的路径时,输出为
该输出也是正确和预期的。
但是,当我从另一个位置运行 HelloWorld.exe 并使用带有转义空格和括号的路径时,找到了程序(即路径正确),但输出错误:
出于某种原因,逃逸的空间
P:\Test\^ ^(x86^)\HelloWorld.exe
出于某种原因,它变成了一个空格读取操作符,Windows 在将路径作为一个字符串读取以找到程序之后,在创建程序然后引用的数组之前决定它实际上是两个字符串。
此行为在 Windows XP (x86) 和 Windows Server 2008 R2 (x64) 中都会出现。我假设它存在于所有 (NT) 版本的 Windows 中。
windows - 如何查询正在运行的进程的登录类型?
我至少想区分我的软件作为批处理作业(LOGON32_LOGON_BATCH
)运行和交互运行(LOGON32_LOGON_INTERACTIVE
)的情况。
php - 使用 Windows 身份验证作为 Intranet 应用程序的登录凭据
我正在使用 PHP 开发 Intranet Web 应用程序。我试图使用 Windows NT 登录凭据登录到应用程序。我在这里遇到的麻烦是如何获取远程用户的 Windows 用户名?我想获取用户名,然后检查各种 LDAP 组,以便我可以将它们引导到我的应用程序中的适当页面。
到目前为止我已经尝试过
它们都返回空值。
更新:使用 $_SERVER['REMOTE_ADDR'] 我能够获取计算机的 IP 地址。无论如何我可以获得用户 ID/用户名(任何唯一的)并使用它来与 LDAP 组进行比较?当他们进入网站的主页并存储会话然后在整个网站中使用会话变量时,我想这样做。
wix - wix 生成的引导程序不是有效的 NT 应用程序
我们使用 WiX 3.7 生成了一个引导程序 exe,并在 XP、Win7 上进行了尝试,它运行良好。但是在 NT (4.0) 机器上,我们在启动 exe 时收到“...不是有效的 NT 应用程序”错误。是支持 WinNT 的以前版本的 WiX,还是我们必须编写自己的引导程序?
在此先感谢,弗兰基
optimization - 如何确定 Windows 系统的最大 COM 端口号?
我有一个系统,它有一些通过虚拟 COM 端口与之通信的设备。随着时间的推移,COM 端口号会发生变化。我编写了一些代码来搜索这些设备的新 COM 端口号并记住它们。这工作正常。
我的问题是定义 COM 端口号搜索范围。我在 Microsoft KB 中发现, Windows NT 操作系统上通常(默认情况下)有 256 个 COM 端口的限制。他们还指定这是可配置的,并且没有什么可以阻止系统具有非常不同的最大 COM 端口号。
我想知道是否有办法以编程方式知道 COM 端口号范围。显然,如果我让系统只搜索 2⁸ 范围,那么它所花费的时间将比搜索 2¹⁶ 范围要短得多!但是,如果运行我的应用程序的系统设置为支持超过 2⁸ 的 COM 端口号,那么在某些时候,应用程序肯定会开始一遍又一遍地失败,直到 COM 端口号分配循环回 COM0(或者它是 COM1?)。如果不需要太多巫术,我想避免这种情况。
我主要使用 Java,但欢迎任何想法。