Articles of UAC

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文档: […]

显示应用程序中被忽略的清单

我有一个老式的Windows GDI应用程序,用C编写,正在用Mingw工具链编译。 我的一些用户一直在抱怨Windows Vista和Windows 7的虚拟商店,其中写入应用程序不应访问的目录的文件被虹吸掉并存储在别处。 他们说这让他们感到困惑,而他们宁愿有一个错误。 根据微软的文档,防止这种情况发生的方法是添加一个应用程序清单。 不幸的是,这似乎没有做任何事情。 我的清单是: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <description>WordGrinder</description> <assemblyIdentity version="1.0.0.0" name="WordGrinder"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> …和引用它的资源文件是: CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "src/c/arch/win32/manifest.xml" 101 ICON DISCARDABLE "src/c/arch/win32/icon.ico" (并不复杂,你可以看到。)资源文件是用windres编译的,并以通常的方式链接到我的应用程序。 图标显示出来,所以我相信至less这一点是正确的。 还有什么我需要做的,让清单得到尊重?

Win C#:以pipe理员身份运行应用程序,无需UAC提示

我需要我的一个.exe永远以pipe理员身份运行没有UAC提示。 我的程序将安装与设置,这将有一次pipe理员权限,我需要执行这样的步骤在这个设置中,我的exe文件将始终作为pipe理员没有UAC提示执行。 到目前为止我find了两个解决scheme: 1.使用自定义服务,这将提升我的程序。 2.使用任务计划程序 。 有没有其他解决scheme? 有些可能显示吗? 谢谢。

使用mingw32embedded清单文件以要求pipe理员执行级别

我在ubuntu下用i586-mingw32msvc交叉编译一个应用程序。 我很难理解如何使用mingw32来embedded清单文件以要求pipe理员执行级别。 对于我的例子,我用这个hello.c : int main() { return 0; } 这个资源文件hello.rc : 1 Manifest "hello.exe.manifest" 这个清单文件hello.exe.manifest : <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="hello" type="win32"/> <description>Hello World</description> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> 我编译我的资源文件: i586-mingw32msvc-windres hello.rc hello.o 我编译我的最终申请: i586-mingw32msvc-gcc -O3 -Os -s -o hello.exe hello.c hello.o […]

Delphipipe理员权限D7 W7

可能重复: Delphi:需要时提示UAC提升 我用Delphi 7编写的用于Windows 7的应用程序需要pipe理员权限来执行某些function。 我怎样才能从源代码提升到pipe理员? 我用这个代码检查用户权限: function IsUserAdmin : boolean; const CAdminSia : TSidIdentifierAuthority = (value: (0, 0, 0, 0, 0, 5)); var sid : PSid; ctm : function (token: dword; sid: pointer; var isMember: bool) : bool; stdcall; b1 : bool; begin result := false; ctm := GetProcAddress(LoadLibrary('advapi32.dll'), 'CheckTokenMembership'); if (@ctm <> nil) […]

在哪里放普通的可写应用程序文件?

我认为CSIDL_COMMON_APPDATA\company\product应该是放置应用程序的所有用户共同的文件的地方,应用程序可以修改,但是,在Vista上这是一个只读的位置,除非安装程序修改(如每MSDN – http://msdn.microsoft.com/en-us/library/ms995853.aspx ),所以…什么是最好的? 修改位置的安全设置,以允许编写或使用CSIDL_COMMON_DOCUMENTS\company\product ? 也许还有第三个select? 另外,在这个地方有没有“官方”的微软推荐?

为什么我的应用程序以pipe理员身份运行时工作不同

我有一个小的Delphi应用程序,它将一个键写入LOCAL_MACHINEregistry。 当我使用具有pipe理员权限的用户在Windows 7专业版上运行它时,它无法写入值,但是当我右键单击并select“以pipe理员身份运行”时,它可以正常工作。 代码是: var reg : TRegistry; begin Result := false; reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; if (reg.OpenKey('Software\YepYep', TRUE)) then Begin try reg.WriteString('ProductKey', Trim(ProductKey)); Result := true; finally reg.CloseKey(); end; End; reg.Free; end; 计算机UAC设置设置为“只有当程序尝试对我的计算机进行更改时才通知”(第二低级别)。 当我将其logging为“从不通知”时,它也可以工作(不需要使用“以pipe理员身份运行”)。 如果您对可能出现的问题有任何想法/想法,我将不胜感激。 谢谢。

Windows 7不允许我在“通用应用程序数据”文件夹中编辑文件

我想存储一些文件,并在Windows 7下的通用应用程序数据中编辑我的软件。 我不知道为什么Windows 7不允许我的软件更改文件,除非我以pipe理员身份运行它们。 我在哪里可以存储我的文件,所以它不需要pipe理员权限?

从以admin身份运行的进程中以用户身份启动进程

我想从一个以pipe理员身份运行的程序启动另一个以用户身份运行的程序。 问题是第二个程序需要使用outlook,如果程序以admin身份运行,这是不可能的。 主程序需要以pipe理员身份运行。 我已经想出了这两个解决scheme: Process.Start("cmd.exe", @"/C runas.exe /savecred /user:" + Environment.UserDomainName + "\\" + Environment.UserName + " " + "\"SomeProgram.exe" + "\""); 要么 Process.Start("explorer.exe", "SomeProgram.exe"); 但是我对这两个解决scheme都有问题。 第一个要求用户input密码(仅在Windows重新启动后第一次)。 第二个probalby未来不会工作,因为据我所知,它被认为是一个bug,并可能在未来更新。 所以我想知道有没有其他解决scheme,用户不需要input密码? 这似乎为我工作: Process.Start("cmd.exe", @"/C runas.exe /TrustLevel:0x20000 " + "\"SomeProgram.exe" + "\"");

用UAC进行Windows UAC安全

我有一个用旧的Borland C ++编译器创build的exe文件。 它需要pipe理员权限才能正常工作。 由于该应用程序将在启动时运行,我不希望用户提示是否可以运行该程序(在Win7上testing)。 我的问题是有没有办法消除这个恼人的提示每次运行应用程序? 我添加了一个包含pipe理员权限的清单文件并对其进行了签名,但是它仍然以发布者名称显示。 这将分发,所以我不希望用户不得不closuresUAC或做任何事情太复杂。 任何build议,非常感谢。 我希望UAC有一些像“永远信任这个计划”之类的东西。