1、
在GINA里调用GetModuleFileName:
/* * 获取当前程序的全路径 */ memset(imagePath, 0, sizeof(imagePath)); GetModuleFileName(NULL, imagePath, MAX_PATH);
2、本希望得到的路径是 C:\Windows\System32\,没想到得到下面的路径(有\??\)
原因:这是window下的空间原致的,从winobj中我们也可以看到这些:
WinObj是应用开发一个必须具备的工具,如果你是系统管理员担心安全问题,开发人员跟踪对象相关的问题,或只是好奇的对象管理器命名空间。
WinObj是一个32位Windows NT程序,使用本机Windows NT的API(由NTDLL.DLL中提供)来访问和显示在NT对象管理器的名称空间的信息。
Winobj可能看起来类似微软SDK的同名的软件,但是从众多的SDK版本,防止显示准确的信息(如它的句柄和引用计数信息是完全打破)有重大错误受到影响。
此外,我们的WinObj了解更多的对象类型。最后,我们WinObj版本具有用户界面增强2.0,知道如何打开设备对象,并会让你查看和更改对象的安全信息,使用本地NT安全性的编辑。
在对象管理器是NT对象管理。作为这种责任的一部分,它维护内部命名空间各种操作系统组件,设备驱动程序和Win32程序可以存储和查找对象。新界原生API提供程序,允许用户模式程序浏览命名空间和对象的查询设在那里的地位,但没有证件的接口。
3、解决方法
我测试过了,如果在system32路径下跑一下平常的应用程序,应用程序中获得的当前路径是没有\??\的,
我猜想与GINA运行在winlogon有关系。