我已阅读Dynamic-Link Library Best Practices并了解我在DllMain能做什么,不能做什么。
现在,我说有一个包含许多项目的visual studio 2013解决方案。每个项目都会生成不同的二进制文件/ lib文件。
假设我有一些实用程序项目,生成一个lib文件,供所有项目使用。
现在,这个实用程序项目可能会定义一些调用的泛型函数,例如,LoadLibrary function基于上面的链接是:从不在DllMain中执行以下任务
如何实现通用功能,"知道"它不能使用某些API,因为它的调用范围为DllMain
函数?
是否可以访问Windows加载程序锁定并禁用某些调用或更改函数的算法(如果已锁定)?
项目实用程序
wstring GetUserName() // just an example!
{
// do something including LoadLibrary call
}
项目A
BOOL WINAPI DllMain(
_In_ HINSTANCE hinstDLL,
_In_ DWORD fdwReason,
_In_ LPVOID lpvReserved
)
{
// calls Utility - GetUserName()
}
项目B
int _tmain(int argc, _TCHAR* argv[])
{
// calls Utility - GetUserName()
}
虽然GetUserName()
对函数Project B
的调用完全正常,但在Project A
我想以这样的方式使mu解决方案变得聪明,以避免这种情况。
wstring GetUserName() // just an example!
{
if( IsLoaderLocked() )
// do something excluding LoadLibrary call
else
// do something including LoadLibrary call
}
if( IsLoaderLocked() )
当然不是真正的代码。只是一个例子,我想在调用之前评估一下这个问题"危险" API。