草庐IT

windows - 函数 Hook 实际上是如何工作的? WinAPI, C++

我正在将我的DLL注入(inject)到一个进程中,然后像这样Hook一个函数:(recv)BOOLHookFunction(LPCWSTRmoduleName,LPCSTRfuncName,LPVOIDfuncProxy,unsignedchar*lpBackup){BYTEjmp[6]={0xe9,0x00,0x00,0x00,0x00,0xc3};DWORDfuncAddr=(DWORD)GetProcAddress(GetModuleHandle(moduleName),funcName);DWORDprev;VirtualProtect((LPVOID)funcAddr,6,

python - CTRL+ALT+DEL 在 win32api 和 python 中不起作用

我正在使用python来虚拟运行键盘,但使用以下代码执行Ctrl+Alt+Del不起作用,Ctrl+Shift+Tab或其他组合键以这种方式工作。我所指的十六进制代码列表来自hereimportwin32apiimportwin32conimporttimewin32api.keybd_event(0xA2,0,0,0)time.sleep(.01)win32api.keybd_event(0xA4,0,0,0)time.sleep(.01)win32api.keybd_event(0x2E,0,0,0)time.sleep(.04)win32api.keybd_event(0xA2,

windows - SetDllDirectory 不级联,所以无法加载依赖DLL

我从一个目录执行一个exe,比如“C:/test”DLL位于目录“C:/test/dlls”中,因此,在此exe中,我调用:SetDllDirectory("C:/test/dlls");然后我打电话lib1=LoadLibrary("lib1.dll)和ptrTypepr=(ptrType)::GetProcAddress(lib1,"test")lib1.dll需要目录“C:/test/dlls”中的其他DLL,但是当我执行pr(...)时从GetProcAddress,我得到一个错误:"Theprogramcan'tstartbecauselib2.dllismissingfro

windows - 调用 GetProcAddress 时出现错误 127

我正在为WH_GETMESSAGE编写一个全局钩子(Hook)。但是当从dll调用GetProcAddress函数时,我收到错误代码127,即ERROR_PROC_NOT_FOUND。它无法找到GetMsgProc。知道为什么吗?另外,我是这种编程的新手,对于任何意外的错误,我深表歉意。动态链接库文件:#include"windows.h"#includeBOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){returnTRUE;}__declspec(dllexport)LRESULTC

对 Winapi 路径和文件名的说明(W 函数和 A 函数)

我已经尝试检查使用Wwinapi与A的重要性和原因,(W表示宽字符,A表示ascii,对吗?)我做了一个简单的例子,我收到了这样一个当前用户的临时路径:CHARpszUserTempPathA[MAX_PATH]={0};WCHARpwszUserTempPathW[MAX_PATH]={0};GetTempPathA(MAX_PATH-1,pszUserTempPathA);GetTempPathW(MAX_PATH-1,pwszUserTempPathW);printf("pathA=%s\r\npathW=%ws\r\n",pszUserTempPathA,pwszUserTem

windows - 错误 RC2247 : Symbol name too long (winnt. h)

尝试在Win32应用程序中显示对话框时出现RC2247错误(符号名称太长)。此文件中发生错误:C:\ProgramFiles(x86)\WindowsKits\10\Include\10.0.17134.0\um\winnt.h这在VS2015下运行良好。当我升级到VS2017时出现错误。我看过以下帖子,它们似乎不相关,因为它们属于prsht.h:RC2247:CannotopenRcfile:Resourceexplorercannotloadresource;Loadfailedhttp://social.msdn.microsoft.com/Forums/en-US/vcprer

c++ - 是否每个 Windows 服务都调用其可执行的 main 函数?

我有一个关于Windows服务的非常基本的问题,我有这个安装的main函数,我可以用它来安装我的服务,还有一些配置数据加载到main函数中:intwmain(intargc,WCHAR*argv[]){//itreadsconfigandfillaglobalstruct.ReadConfig();//ifcommand=='install'install_service();}这是服务的主要功能:voidWINAPIServiceMain(DWORDargc,WCHAR*argv[]){//thismethodretrievestheglobalconfigobject.autoco

c++ - 使用来自系统级进程(Windows 服务)的登录用户上下文模拟和运行任何方法 :

我已经创建了一个模板类,它将创建一个带有登录用户token的线程并运行任何方法。我在std::function的帮助下将它传递给模板类,并在用户级上下文中运行它。我目前的使用情况:1.该类用于windows服务进程(以SYSTEM级别运行)。2.线程在挂起状态下创建,SetThreadToken()用于应用从“explorer.exe”创建的模拟token。(我知道在多个登录用户的情况下这不是一种可行的方法,但暂时我需要这个东西来解决问题)。3.在这些之后,我将恢复线程以在用户级上下文中执行传递的util方法。引用的线程模拟来自:Createthreadwithspecificpriv

windows - 如何使用 Windows API 将菜单背景渐变复制或复制到位图上?

我正在尝试(未成功)将Windows菜单栏的背景渐变复制/复制到位图上。在下面的IconToBitmap函数中,FillRect(一厢情愿地)使用GetSysColorBrush(COLOR_MENU)尝试让它按照Windows中的方式绘制菜单背景(毫不奇怪,画笔不是渐变,但值得试一试。)它下面的BitBlt是一种“作弊”的尝试。捕获一部分已经绘制的菜单栏并使用它。这也不起作用,我怀疑原因可能是因为在主窗口的WM_CREATE期间调用了函数IconToBitmap(我不确定菜单栏是否存在于窗口创建的早期。)我之前确实需要背景窗口首先可见,这就是在处理WM_CREATE时调用该函数的原因

windows - 如果我们更改完整性级别,SID 会更改吗?

如果我们改变完整性级别,SID会改变吗?我的代码正在更改完整性级别,我在ProcessExplorer中看到了它。但是我不知道是否也应该为进程更改SID。在这种情况下,为了证明这一点,我想在ProcessExplorer中更改进程的完整性级别,并查看SID是否发生变化。但是如何在ProcessExplorer中更改完整性级别? 最佳答案 进程没有用于对其他对象进行访问检查的SID,SID是线程/进程token的一部分。(进程和线程是安全的内核对象,因此具有带SID的ACL,但这在这里并不真正相关)。Theintegritylevel