我想尝试写我自己最小的NT子系统在Windows 7上的纯粹的教育目的 - 有点像一个最基本的等效posix.exe在微软的子系统基于UNIX的应用.
但我似乎无法找到有关此主题的任何公开文档.子系统需要实现什么API?它是如何在Windows注册的?如何构建子系统映像(需要在PE头中设置哪些标志等)?
我最希望找到一本书或网站,其中包含整个主题的概述,甚至是其他人编写的"hello world"NT子系统的源代码.但是,如果你能指出我正确的方向,那么任何事情都会受到赞赏......
我正在尝试迁移的MFC应用程序使用afxext.h,导致_AFXDLL设置,如果我设置,则会导致此错误/MT:
请使用/ MD开关进行_AFXDLL构建
我迄今为止的研究表明,使用Visual Studio(在本例中为C++)2005在Windows NT 4.0上构建应用程序是不可能的.
这是真的吗?有没有可用的解决方法?
NT有一个大多数未记录的API,称为"Native API",在其上实现了公共子系统(即Windows API,OS/2 API和POSIX(现在通常称为" Interix ")子系统).
存在一些试图记录此API的书籍和网站:
不幸的是,没有一本书或网站,我可以尝试触摸64位版本的Windows(当然除了WDK,但WDK是有限的....).API调用本身是相同的 - 最大的问题与结构定义本身有关.即 - 指针值和DWORD在32位平台上的大小相同,但在x64平台上不同.因此,在x64窗口上,通常被定义为DWORD数组的结构的"未知填充"位是错误的 - 结果是完全垃圾.
我通过每次API调用手动添加额外的填充来手动处理这些事情,但是这真的令人沮丧,并且有一个资源只是记录这些事情以便他们正确使用会很好指针而不是DWORD(如果需要),因此单个结构定义可以同时用于32位和64位Windows.
这样的资源是否存在?
我必须为支持租户的Web应用程序支持多种数据库类型.其中,我已成功支持Microsoft的SQL Server,使用net.sourceforge.jtds.jdbc.Driver类和连接字符串,如"jdbc:jtds:sqlserver://192.168.1.189:1433/ApplicationName".这有效,但它要求用户在SQL Server实例中明确定义用户并启用SQL Server身份验证.
现在,不可避免地,需求发生了变化,我们应该支持通过Windows身份验证连接到SQL Server.显然,这需要对连接字符串进行某种更改,因为数据库服务器必须能够以某种方式区分传递到数据库连接的凭据是用于在SQL Server安装中还是在Windows操作系统中定义的用户.但它是什么?
根据互联网的建议,如果进展到扩展连接字符串;useNTLMv2=true;domain=WORKGROUP.这似乎使数据库服务器意识到我想要作为Windows用户进行身份验证,但实际的登录失败了
The login is from an untrusted domain and cannot be used with Windows authentication. (code 18452, state 28000)
Run Code Online (Sandbox Code Playgroud)
现在我的测试设置,J2EE应用程序和SQL服务器实例实际上都在同一台机器上(虽然在生产中它们可能不是),而且这台计算机还不足以登录自己?显然我在这里错过了很大一部分难题.为了说服SQL Server实例启动它的用户实际上可以通过JDBC登录它,必须做些什么呢?
编辑
由于我们已经尝试将我们的Web应用程序与完整的Microsoft基础架构堆栈(SQL Server,Active Directory,域名服务...)集成太多不成功,我必须限制此问题:
有没有人知道通过JDBC形式的J2EE应用程序使用定义为"Windows用户"的用户帐户访问SQL Server安装的方法,而不必使用Active Directory,运行Web应用程序的Windows机器和专有DLL?赏金是针对该子问题的任何解决方案.整个问题显然过于宽泛,无法在一篇论坛帖子中得到解答.
在C++ Windows(XP和NT,如果它有所作为)我正在研究的应用程序中,我需要获取与执行代码的计算机相关联的网络名称,以便我可以从C:转换本地文件名filename.ext到\\network_name\C $\filename.ext.我该怎么做?
或者,如果有一个函数只会进行我所描述的转换,那就更好了.我查看了WNetGetUniversalName,但这似乎不适用于本地(C盘)文件.
我有一个系统,它有一些设备,通过虚拟COM端口进行通信.随着时间的推移,COM端口号会改变.我制作了一些代码来搜索这些设备的新COM端口号并记住它们.这很好用.
我的问题是定义COM端口号搜索范围.我在Microsoft KB中发现,Windows NT操作系统通常(默认情况下)限制为256个COM端口.他们还指出这是可配置的,并且没有什么能阻止系统具有非常不同的最大COM端口号.
我想知道是否有办法以编程方式知道COM端口号范围.显然,如果我让系统只搜索2⁸范围,那么比搜索2⁶⁶范围需要的时间要短得多!但是如果运行我的应用程序的系统被设置为支持超过2个COM端口号,那么在某些时候应用程序肯定会一次又一次地失败,直到COM端口号分配循环回到COM0(或者它是COM1?).如果它不需要太多巫术,我想避免这种情况.
我主要使用Java,但欢迎任何想法.
根据Raymond Chen 的这篇博客文章,Windows NT 通过将窗口移动到坐标 (-32000, -32000) 来“最小化”窗口,并且,我从阅读它得到的印象是 Windows NT的早期版本就是这种情况(3.x,4...)。
在现代版本的 Windows NT(例如 7、8 和 10)中,情况是否仍然如此?
是否有可以编写的程序来演示现代 Windows 操作系统上此功能的存在/不存在?
使用"C:\ Program Files(x86)"我遇到了一个奇怪的问题,程序位于该路径下方的某个位置.我用测试程序重现了这个行为.
int _tmain(int argc, _TCHAR* argv[])
{
wprintf(L"%d\n", argc);
for (int i = 0; i < argc; i++) {
wprintf(L"%s\n", argv[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序计算并返回所有命令行参数(包括用于标识程序的程序路径).我把它命名为"HelloWorld.exe",因为我很着急.
对于运行程序的三种可能方式,它给出了两种不同的结果,而我期望得到相同的结果.
当我从自己的目录运行HelloWorld.exe时,输出是
1
HelloWorld.exe
Run Code Online (Sandbox Code Playgroud)
该输出是正确的和预期的.
当我从另一个位置运行位于"P:\ Test(x86)"的HelloWorld.exe并使用引用路径时,输出为
1
P:\Test (x86)\HelloWorld.exe
Run Code Online (Sandbox Code Playgroud)
该输出也是正确的和预期的.
但是,当我从另一个位置运行HelloWorld.exe并使用带有转义空格和括号的路径时,找到该程序(即路径是正确的),但输出错误:
2
P:\Test
(x86)\HelloWorld.exe
Run Code Online (Sandbox Code Playgroud)
由于某种原因,逃离的空间
P:\ Test\^ ^(x86 ^)\ HelloWorld.exe
由于某种原因和Windows成为空间读取操作符,在读取路径作为一个字符串来查找程序之后,在创建程序然后引用的数组之前,确定它实际上是两个字符串.
Windows XP(x86)和Windows Server 2008 R2(x64)中都会出现此问题.我假设它存在于所有(NT)版本的Windows中.
我被告知,Windows NT最初是为实现微内核架构而设计的,但却转移到了混合内核.
是什么导致了变化?我无法找到有关此信息的任何信息.
我试图为 Angular2 进行环境设置,为此我在使用命令时遇到下面提到的错误:npm install
我有 Node 版本:Node 版本是 v6.7.0,npm 版本是 3.10.3
有同样的解决方案吗?
windows-nt ×10
c++ ×3
windows ×3
angular ×1
debugging ×1
jdbc ×1
jtds ×1
microkernel ×1
networking ×1
node.js ×1
npm-install ×1
optimization ×1
screen ×1
serial-port ×1
sql-server ×1
subsystem ×1
windows-xp ×1