C 关键\u节没有DebugInfo

C 关键\u节没有DebugInfo,c,winapi,critical-section,C,Winapi,Critical Section,在win32程序执行期间,我试图查看临界_部分的DebugInfo,在使用InitializeCriticalSection之后,DebugInfo指针为-1 CRITICAL_SECTION myCS; InitializeCriticalSection(&myCS); printf("%d", myCS.DebugInfo); // prints: -1 我还尝试过初始化CriticalSectionEx&myCS,4000,0;结果也一样。无论我是否进入了这一关键环节,都会得到

在win32程序执行期间,我试图查看临界_部分的DebugInfo,在使用InitializeCriticalSection之后,DebugInfo指针为-1

CRITICAL_SECTION myCS;
InitializeCriticalSection(&myCS);
printf("%d", myCS.DebugInfo); // prints:  -1

我还尝试过初始化CriticalSectionEx&myCS,4000,0;结果也一样。无论我是否进入了这一关键环节,都会得到同样的结果。是否可以访问此DebugInfo,以及如何访问此DebugInfo?

这是一个老问题,但尚未回答

通过使用RTL_CRITICAL_SECTION_FLAG_force_DEBUG_INFO FLAG调用InitializeCriticalSectionEx,可以强制创建DebugInfo结构:


此标志不包括在上,但在winnt.h上定义。这是一个老问题,但没有答案

通过使用RTL_CRITICAL_SECTION_FLAG_force_DEBUG_INFO FLAG调用InitializeCriticalSectionEx,可以强制创建DebugInfo结构:


此标志不包括在上,但它是在winnt.h上定义的。我假定您是在为编译器启用调试的情况下生成的?您正在使用的Windows版本完全可能不使用该字段。内部结构可以/确实在没有警告的情况下更改。您将如何处理此信息?FWIW,您使用%p打印指针。不管怎样,我们怎样才能重现你所观察到的。您需要让我们知道您使用的是什么系统。因为这个私有字段是特定于系统的。@segfault:只有在调试器下运行时(例如,通过检查或类似方式),他们才能轻松地填充该字段。而且,他们可以选择权力!使用与DebugInfo字段完全不同的机器锁定。毕竟,SRWLock是您希望在新代码中使用的,它们没有可以隐藏指针的位置。我假设您是在为编译器打开调试的情况下构建的?完全可能您正在使用的Windows版本不使用该字段。内部结构可以/确实在没有警告的情况下更改。您将如何处理此信息?FWIW,您使用%p打印指针。不管怎样,我们怎样才能重现你所观察到的。您需要让我们知道您使用的是什么系统。因为这个私有字段是特定于系统的。@segfault:只有在调试器下运行时(例如,通过检查或类似方式),他们才能轻松地填充该字段。而且,他们可以选择权力!使用与DebugInfo字段完全不同的机器锁定。毕竟,SRWLock是您希望在新代码中使用的,它们没有可以隐藏指针的地方。谢谢gusitoguay!为了我的生命,我不记得为什么我想要这个,但至少现在我们知道了。谢谢gusitoguay!就我的一生而言,我不记得我为什么想要这个,但至少现在我们知道了。
InitializeCriticalSectionEx(&cs, 4000, RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO);