jjzjj

c++ - 注册文件 - "dword"转换成什么?

我有一个正在尝试读取的reg文件。某些值中有一个类型“dword”..."check"=dword:000001f4"blah"=dword:000000c8"test"=dword:00000000"hello"=dword:00000000我应该将它转换成什么C++类型?以及如何? 最佳答案 dword是一个双字,其中一个字是旧的(Intel8086)16位字。因此,它转换为WinAPI特定类型DWORD,或标准C(但还不是标准C++)类型uint32_t。C++03保证unsignedlong足够大以容纳32位值,但在64位平

c++ - 从设备实例路径字符串中获取设备实例 DWORD

我得到一个像这样的设备实例路径L"\\\\?\\USB#VID_0403&PID_6001#6&2cc2d230&0&2#{219d0508-57a8-4ff5-97a1-bd86587c6c7e}"来自IWDFRemoteInterfaceInitialize::RetrieveSymbolicLink.但是对于CM_Get_Parent我需要让我发疯的设备的DEVINST/DWORD。例如我试过instancePath=L"\\\\?\\USB#VID_0403&PID_6001#6&2cc2d230&0&2#{219d0508-57a8-4ff5-97a1-bd86587c6c7

c++ - 在 Windows、TIB 和异常上修改堆栈

我的问题的起源实际上源于想要在支持用户提供堆栈的Windows上提供pthreads的实现。具体来说,pthread_attr_setstack应该做一些有意义的事情。我的实际要求比这要复杂一些,但这足以满足本文的目的。没有公共(public)WinAPI可以在Fiber或ThreadAPI中提供堆栈。我四处寻找偷偷摸摸的后门、变通办法和黑客,没有任何进展。事实上,我查看了winpthread源代码以获得灵感,它忽略了提供给pthread_attr_setstack的任何堆栈。相反,我尝试了以下“解决方案”以查看它是否可行。我使用ConvertThreadToFiber、CreateF

c++ - 如何(最好)将 WM_QUIT 发布到正在运行的进程?

目标:在windows下关闭一个正在运行的32位GUI进程我可以访问可执行文件的路径名。此软件可能有多个拷贝在运行,但只有一个从唯一的可执行文件路径名启动。因为可以运行此可执行文件的多个实例,简单查看顶级窗口需要区分哪个可执行文件路径名实际负责该窗口...可能的方法:枚举进程&线程,然后使用PostThreadMessage(thread,WM_QUIT,0,0)这很有道理,但我担心用什么技术来区分“主线程”有这种方法的例子:Thisassumesthatthethreadwiththefirstcreationtimeismain.Thisusesa32-bitonlytrickto

windows - 获取 Windows 架构(32/64 位版本)

我遇到了一个小问题:我想了解操作系统的架构,问题是我的编程语言不支持此类功能。因此,我需要从Windowsdll(如kernel32.dll)中读取此信息我确实尝试使用函数GetNativeSystemInfo/GetVersionEx/GetSystemInfo获取信息。不幸的是我无法获得架构:/在任何windowsdll中是否有一些其他的函数来读取架构?(它不需要是kernel32它可以是任何dll但它必须存在于winxp+中)作为信息:我正在使用Gupta(SQLWindows/Teamdevoloper)编辑1:typedefstruct_SYSTEM_INFO{union{D

c++ - SymInitialize 失败,错误 2147483661

知道为什么会这样吗?该方法对于当前进程完美运行,对于在同一台本地计算机上运行的远程进程失败,对我来说是垃圾错误代码2147483661(0x80000000D),因为在任何地方都没有关于这个特定错误代码的提示,或者我错过了什么?.另外,我觉得;因为SymInitialize本身失败了,SymFromAddr也是如此。我说得对吗?有问题的进程以管理员身份运行,并且具有SeDebug和SeSecurity权限。boolDbgHelpWrapper::MatchTargetSymbol(IntPtrprocessHandle,intprocId,intthreadId){DWORDdwSta

c++ - 使用 DWORD 解析重载函数调用

使用MicrosoftC++2017,64位构建,以下代码行生成编译错误,对重载函数的调用不明确:print(pmc.PageFaultCount);我定义了以下打印函数,希望能明确涵盖所有常用的整数类型:voidprint(int32_tn);voidprint(int64_tn);voidprint(uint32_tn);voidprint(uint64_tn);pmc.PageFaultCount声明为DWORD,记录为无符号32位整数。我希望选择uint32_t重载。这怎么模棱两可?更重要的是,如果上述一组重载不足以打印任何整数,那么什么一组重载就足够了?

c++ - 一个 DWORD 可以容纳多少个标志?

使用标志有点新,但也不是C++的最佳选择。我只是想知道,一个DWORD可以容纳多少个标志?我假设它是32,因为32位?如果没有,它是否可以至少容纳16个标志,因为我至少需要这个。我可以找到如何使用标志,没问题,但在网络上找不到任何地方说明不同类型的数据类型可以持有的值,我再一次假设它只是他们拥有的位数,但是我找不到足够的信息来澄清这一点。谢谢。 最佳答案 问题是带有标记的C++,所以如果您想存储16个标记,只需使用std::bitset。如果您想确定整数的位大小,请使用cstdint并键入linkeuint16_t、uint64_t

c++ - 带有 PAGE_GUARD 的 VirtualProtect 不使用局部变量

这按预期工作。引发了STATUS_GUARD_PAGE_VIOLATION。intmain(){DWORDoldp;DWORD*pdp=newDWORD;*pdp=0;if(!VirtualProtect(pdp,sizeof(DWORD),PAGE_READWRITE|PAGE_GUARD,&oldp))return1;*pdp=1000;return0;}然而,当运行这段几乎相同的代码时,程序无一异常(exception)地退出。intmain(){DWORDoldp;DWORDpd=0;DWORD*pdp=&pd;if(!VirtualProtect(pdp,sizeof(DWO

c++ - 在 C++ 中将 DWORD 值写入注册表

我正在尝试用C++以编程方式将DWORD值写入注册表。我做了一些搜索,发现以前有人问过这个问题。我尝试遵循他们的解决方案,但提出了一个非常令人沮丧的问题,据我所知,他们的解决方案尚未解决。这是我的代码:HKEYhKey;LPCWSTRsKeyPath;intiResult;sKeyPath=L"Software\\ABI\\";iResult=RegOpenKeyEx(HKEY_CURRENT_USER,sKeyPath,NULL,KEY_ALL_ACCESS,&hKey);DWORDvalue=0x00000003;iResult=RegSetValueEx(hKey,L"Test"