我正在编写一个关于WFP驱动程序中的全局变量的奇怪问题。在编写了一段代码之后,我开始在代码的完全不同的部分获得0x18错误检查,与写入代码无关 - 而且甚至在新代码执行之前就已经发生了。经过简短的分析后,我注意到它是由一个全局变量的声明引起的,编译器忽略了一个注释掉的新片段。一旦使用变量,它就会被放入内存中并开始出现错误检查。我的第一个想法是,也许我应该尝试改变变量声明方式的顺序,以及如何放置在内存中(我认为)。事实证明,经过几次尝试,我能够正确运行代码。代码示例,它不起作用:
PKEVENT gPacketEvent;
HANDLE gFilteringEngineHandle;
HANDLE gInjectionEngineHandle;
PVOID gUASharedMem;
PVOID gSharedMem;
UINT64 gActiveFilter;
UINT32 gCalloutID;
PMDL gMdl;
我猜我上面使用的一个或多个类型(我猜PMDL和PKEVENT?)会导致这样的问题,但遗憾的是我从未见过这样的行为,而且我还没有找到任何有用的东西在谷歌上。我能够开发这段代码一段时间,来回改变顺序以找到一个有效的代码,但是最好能够深入了解这个......任何想法,为什么会发生这种情况?