Articles of Windows

Windows Vista / Win7权限问题:SeDebugPrivilege&OpenProcess

我所能find的关于升级到适合我需要的特权的一切都与我目前的方法一致,但存在问题。 我希望也许有人有一些Windows Vista / Win7的内部经验,可能会发光的地方,只有黑暗的光线。 我相信这会很久,但请和我一起裸露。 背景 : 我正在开发一个应用程序,需要访问当前机器上其他进程的内存。 显然,这需要pipe理员权限。 这也需要SeDebugPrivilege ,我相信自己正确地获得,虽然我质疑是否有更多的特权是不必要的,因此我的问题的原因。 代码至今在所有版本的Windows XP,以及我的testingVista32和Win7x64环境中都能够成功运行。 处理: 程序将始终以pipe理员权限运行。 这可以假设贯穿这篇文章。 升级当前进程的Access Token以包含SeDebugPrivilege权限。 使用EnumProcesses在系统上创build当前PID的列表 使用OpenProcess和PROCESS_ALL_ACCESS访问权限打开一个句柄 使用ReadProcessMemory读取另一个进程的内存。 问题: 在开发和个人testing(包括Windows XP 32&64,Windows Vista 32和Windows 7 x64)期间,一切工作都正常。 但是,在同事的Windows Vista(32位)和Windows 7(64位)机器的testing部署过程中, OpenProcess出现通用Access Denied错误似乎存在特权/权限问题。 在以有限的用户身份运行时(如预期的那样)以及以pipe理员身份(右键单击>以pipe理员身份运行以及从pipe理员级别的命令提示符运行时)时,都会发生这种情况。 但是,在我的testing环境中,这个问题对于我自己来说是不可重现的。 我亲眼目睹了这个问题,所以我相信这个问题是存在的。 我可以在实际环境和我的testing环境之间区分的唯一区别是在UAC提示符下使用域pipe理员帐户时发生的实际错误,而我的testing(没有错误的工作)在本地使用本地pipe理员帐户UAC提示。 看起来,虽然使用的凭据允许UAC以“pipe理员身份运行”,但进程仍然没有获得能够在另一个进程上进行OpenProcess的正确权限。 我对Vista / Win7的内部知识不是很了解,所以我希望有人知道可能是什么原因。 踢球者: 报告这个错误和谁的环境的人可以定期地重现这个错误,有一个小的应用程序,名为RunWithDebugEnabled ,它是一个小的引导程序,看起来会提升自己的权限,然后启动传递给它的可执行文件inheritance升级的权限)。 在使用此程序运行时,在UAC提示符下使用相同的域pipe理员凭据,程序将正常工作,并能够成功调用OpenProcess并按预期运行。 因此,获得正确权限肯定是个问题,而且已知域pipe理员帐户是一个pipe理员帐户,应该能够访问正确的权限。 (显然获得这个源代码会很好,但如果可能的话,我不会在这里)。 笔记: 如上所述,失败的OpenProcess尝试报告的错误是Access Denied 。 根据OpenProcess MSDN文档: […]

.Net 3.5 Windows窗体应用程序:64位Vista上的x86与x64加载时间

我们正在开发Winforms应用程序,并正在优化启动时间。 该应用程序运行在64位Vista机器上。 在我们的testing中,我们发现什么似乎是一个直观的结果。 其他所有的情况相同,只有一半的时间针对32位和64位的负载。 任何人都可以谈到为什么? 谢谢。 [编辑]我们通过ClickOnce部署应用程序,从我们的研究开始在一个独特的沙箱应用程序。 所以它总是冷冷的开始,所以看起来提高性能在这里是徒劳的。 我们的主要问题是项目中存在32位dll。 一旦我们在x86上定位项目(即使它在x64上运行),加载时间减半。 [/编辑]

将Rust应用程序从Linux交叉编译到Windows

基本上我正试图编译最简单的代码到Windows,而我正在Linux上开发。 fn main() { println!("Hello, and bye.") } 我通过search互联网发现了这些命令: rustc –target=i686-w64-mingw32-gcc main.rs rustc –target=i686_pc_windows_gnu -C linker=i686-w64-mingw32-gcc main.rs 可悲的是,他们没有一个工作。 它给了我一个关于标准箱失踪的错误 $ rustc –target=i686_pc_windows_gnu -C linker=i686-w64-mingw32-gcc main.rs main.rs:1:1: 1:1 error: can't find crate for `std` main.rs:1 fn main() { ^ error: aborting due to previous error 有什么方法可以在Linux上编译将在Windows上运行的代码?

.rdata和.idata片段有什么区别?

我在IDA注意到,我分析的PE文件不仅有.rdata部分,还有.idata 。 有什么不同?

将进程的IOredirect到Windows套接字

我是新的winsock,我试图写一个服务器套接字,接受新的连接,然后它调用一个外部的可执行文件。 我们如何将外部可执行文件的stdin和stdoutredirect到已被接受的客户端套接字。 我GOOGLE了,发现下面的代码,但它不工作。 新进程已成功创build,但客户端无法从新进程接收任何数据。 我正在使用Windows 7和Visual Studio 2008 Express版本。 任何帮助和意见表示赞赏。 非常感谢! 服务器 #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #pragma comment(lib, "Ws2_32.lib") #define DEFAULT_PORT "27015" #define DEFAULT_BUFLEN 512 int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsaData; int iResult; // Initialize Winsock iResult = WSAStartup(MAKEWORD(2,2), &wsaData); struct addrinfo *result = NULL, *ptr = NULL, hints; ZeroMemory(&hints, sizeof […]

我怎样才能剖析文件I / O?

我们的构build令人烦恼地慢。 这是一个用Ant构build的Java系统,我正在Windows XP上运行。 视硬件而定,可能需要5到15分钟才能完成。 在机器上观察整体性能指标,并将硬件差异与构build时间相关联,表明该过程是I / O限制的。 这也表明,这个过程比写作要多得多。 但是,我还没有find一个很好的方法来确定哪些文件正在被读取或写入,以及多less次。 我的怀疑是,有了我们的许多子项目和随后的编译器调用,构build会多次重新读取相同的常用库。 什么是一些分析工具,会告诉我一个给定的过程是用什么文件做的? 免费是好的,但不是必需的。 正如Jon Skeet所build议的,使用Process Monitor,我能够证实我的怀疑:几乎所有的磁盘活动都是读取和重新读取库,而JDK的“rt.jar”和其他库的副本位于顶部列表。 我无法制作足够大的RAM磁盘来存放我使用的所有磁带库,但在RAM磁盘上安装“最热”磁带库的时间减less了大约40%。 显然,Windows文件系统caching工作并不够好,即使我已经告诉Windows为此做了优化。 我注意到的一件有趣的事情是,对JAR文件的典型“读取”操作只有几十个字节; 通常有两三个,然后在文件中跳过几千字节。 这似乎不适合大量阅读。 我将在闪存驱动器上对所有第三方库进行更多testing,并查看其效果。

System()调用C ++及其在编程中的angular色

我经常听说使用system("PAUSE")是不好的做法,而是使用std::cin.get()来代替。 现在我对系统调用的理解是,他们把一个stringinput到系统命令行并和操作系统通话,所以PAUSE是一个DOS命令,它在命令窗口中暂停输出。 我认为这与Mac和unix具有不同的关键字,并且由于缺乏跨OS兼容性而不鼓励使用系统调用。 (如果我有任何错误,请纠正我) 我的问题是:什么时候适合使用system()调用? 他们应该如何应用? 什么时候不应该申请?

显示HBITMAP

我向前道歉 我是C新手,我真的不知道我在做什么。 我正试图捕获并显示使用Windows 7和c的屏幕截图。 我知道这听起来很愚蠢,最终我需要在不同的程序中使用这些函数中的每一个,捕获屏幕的函数将把图像发送到显示它的图像,但现在我只是想让它们在一个程序中工作。 这是我迄今为止所做的代码: #include <windows.h> bool ScreenCapture(int x, int y, int width, int height){ // get a DC compat. w/ the screen HDC hDc = CreateCompatibleDC(0); // make a bmp in memory to store the capture in HBITMAP hBmp = CreateCompatibleBitmap(GetDC(0), width, height); // join em up SelectObject(hDc, hBmp); // copy from […]

Apache的Windows虚拟目录configuration帮助

我通过Xampplite在Windows XP上运行Apache,并可以使用帮助来configuration我的虚拟目录。 以下是我希望在开发箱上做的事情: 我希望我的源文件能够在xampp htdocs目录之外生存 在我的本地机器上,我可以通过http:// myproject访问该项目 我的本地networking上的其他人可以访问my.ip.address / myproject中的项目 保持localhost指向xampp的htdocs文件夹,这样我可以轻松地添加其他项目。 通过编辑windows hosts文件,并在xampp的apache \ conf \ extra \ httpd-vhosts.conf文件中添加一个虚拟目录,我得到了1&2的工作。 我不会马上看到如何做3,而不会搞乱4。

在交互式会话中启动Windows服务

同事有一个批处理脚本程序,需要在控制台模式下在Windows Server上运行,以便可以访问Windows交互式会话。 服务器会自动定期重启(有一个无关的闭源应用程序在我们无法控制的机器上运行)。 重新启动后,他希望自动启动Windows交互式会话并运行此脚本,此外该服务还需要访问networking资源(特别是CIFS驱动器)。 以下是我们到目前为止的尝试: 作为Windows服务启动。 这失败了,因为Windows服务可以访问交互式会话或networking资源,但从来都没有。 使用Microsoftpipe理控制台添加脚本以在启动时运行,但是这不起作用。 使用HKLMregistry项开始运行此脚本,但只有在手动打开服务器上的远程桌面会话时才会启动。 创build一个计划任务。 被调用的程序没有访问交互式窗口会话。 还有其他build议吗? (或者,当他提出其中一个build议时,他错过了什么?)