昨天我遇到了我见过的最奇怪的问题.我写了一个模块,应该在USB插头上收到通知.为此,我创建了一个虚拟窗口,并使用某个界面将其注册到设备更改通知GUID.
PeekMessage调用时会发生奇怪的错误.在这一点上,为什么,只有当偷看的消息是WM_DEVICECHANGE(我们在上面的代码中注册)时才调用窗口的WndProc回调.在任何其他消息上,DispatchMessage按预期触发回调.
码:
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = guid;
not = RegisterDeviceNotification(
hWnd, // events recipient
&NotificationFilter, // type of device
DEVICE_NOTIFY_WINDOW_HANDLE // type of recipient handle
);
Run Code Online (Sandbox Code Playgroud)
为了将这个模块与我的其他异步代码,使用Reactor设计模式Windows Events,并遵循stackoverflow社区成员的建议,我合并MsgWaitForMultipleObjects,以便监听事件和Windows消息.
码:
for (;;)
{
dwRetval = MsgWaitForMultipleObjects(cntEvents, arrEvents, FALSE, INFINITE, QS_ALLINPUT);
switch (dwRetval)
{
case WAIT_FAILED:
// failed. TODO: status
break;
// TODO: handle abandoned.
default:
if (dwRetval == cntEvents)
{
// Message has popped.
BOOL …Run Code Online (Sandbox Code Playgroud) 最近,我一直在办公室里弄乱PE文件,并且对后台的Windows加载程序的工作很感兴趣。我知道加载PE文件时,加载器需要将PE部分复制到分配的PE内存中,一些加载器提交SizeOfRawData字节,该部分提交VirtualSize字节,有时SectionAlignment(对于未初始化的数据,当SizeOfRawData等于0时)。我的问题是我怎么知道SectionAlignment字节足以容纳该节的所有未初始化数据?也许我有一个比更大的未初始化缓冲区SectionAlignment,那么如何确定它不会覆盖其他部分呢?我可以预测需要分配的大小吗?为了安全起见,我可以提交VirtualSize字节而不是SectionAlignment字节吗?
我有一个愚蠢的问题,我甚至不好意思.由于我对数学的了解不多,我无法弄清楚应该搜索什么.
我正在处理以下等式:
[(a*x)^b]*c=d
其中^代表XOR和*的乘法.
我该如何隔离x?