小编Cod*_*nja的帖子

PeekMessage触发WndProc回调

昨天我遇到了我见过的最奇怪的问题.我写了一个模块,应该在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)

c winapi msdn internals

5
推荐指数
1
解决办法
717
查看次数

PE文件部分-SizeOfRawData或VirtualSize

最近,我一直在办公室里弄乱PE文件,并且对后台的Windows加载程序的工作很感兴趣。我知道加载PE文件时,加载器需要将PE部分复制到分配的PE内存中,一些加载器提交SizeOfRawData字节,该部分提交VirtualSize字节,有时SectionAlignment(对于未初始化的数据,当SizeOfRawData等于0时)。我的问题是我怎么知道SectionAlignment字节足以容纳该节的所有未初始化数据?也许我有一个比更大的未初始化缓冲区SectionAlignment,那么如何确定它不会覆盖其他部分呢?我可以预测需要分配的大小吗?为了安全起见,我可以提交VirtualSize字节而不是SectionAlignment字节吗?

c windows winapi internals portable-executable

3
推荐指数
1
解决办法
980
查看次数

XOR乘法和算术运算的顺序

我有一个愚蠢的问题,我甚至不好意思.由于我对数学的了解不多,我无法弄清楚应该搜索什么.

我正在处理以下等式:

[(a*x)^b]*c=d

其中^代表XOR和*的乘法.

我该如何隔离x?

math xor bitwise-operators

1
推荐指数
1
解决办法
566
查看次数