C++ “为什么?”;CryptCATAdminEnumCatalogFromHash“;对于非交互式用户,返回错误(1062?)?

C++ “为什么?”;CryptCATAdminEnumCatalogFromHash“;对于非交互式用户,返回错误(1062?)?,c++,windows,code-signing,C++,Windows,Code Signing,交互和管理用户与非交互用户在同一文件中的行为不同。对于管理员来说,这似乎总是成功的,但对于非管理员、受限默认用户来说,只有当他们在交互式登录会话、shell等中执行代码时,才会成功。当相同的受限默认用户(例如,在系统引导后)被任务调度器用于执行任务时,这一过程才会失败。另外,我也有这个问题 /* *枚举与哈希匹配的目录信息。 */ uint32_t iCat=0; HCATINFO hcatinfoprov=NULL; 做 { /*参加下一场比赛*/ HCATINFO HCATINFO=g_pf

交互和管理用户与非交互用户在同一文件中的行为不同。对于管理员来说,这似乎总是成功的,但对于非管理员、受限默认用户来说,只有当他们在交互式登录会话、shell等中执行代码时,才会成功。当相同的受限默认用户(例如,在系统引导后)被任务调度器用于执行任务时,这一过程才会失败。另外,我也有这个问题

/*
*枚举与哈希匹配的目录信息。
*/
uint32_t iCat=0;
HCATINFO hcatinfoprov=NULL;
做
{
/*参加下一场比赛*/
HCATINFO HCATINFO=g_pfncryptcatadmin目录fromHash(hCatAdmin、abHash、cbHash、0和hcatinfoprov);
if(!hCatInfo)
{
if(!fFreshContext)
{
SUP#u DPRINTF((“supr3hardtvicallwinverifytrustcatfile:使用新上下文重试(CryptCATAdminEnumCatalogFromHash->%u;iCat=%#x)\n”,RtlGetLastWin32Error(),iCat));
if(hcatinfoprov!=NULL)
g_pfnCryptCATAdminReleaseCatalogContext(hCatAdmin,hcatinfoprov,0/*dwFlags*/);
g_pfncryptatadminreleasecontext(hCatAdmin,0/*dwFlags*/);
转到新的上下文;
}
ULONG ulErr=RtlGetLastWin32Error();
fNoSignedCatalogFound=ulErr==错误\u未找到&&fNoSignedCatalogFound!=0;
如果(iCat==0)
SUP_DPRINTF(((“supr3hardtvicallwinverifytrustcatfile:CryptCATAdminEnumCatalogFromHash失败错误,未找到(%u)\n“,ulErr));
否则如果(iCat==0)
SUP_DPRINTF((“supr3hardtvicallwinverifytrustcatfile:CryptCATAdminEnumCatalogFromHash失败%u\n”,ulErr));
打破
}
fNoSignedCatalogFound=0;
断言(hcatinfoprov==NULL);
hcatinfoprov=hCatInfo;
/*
*打电话给WinVerifyTrust。
*/
[...]
iCat++;
}而(rc==VERR\u LDRVI\u未签名&&iCat<128);
以下是验证成功时日志的外观:

supR3HardNtViCallWinVerifyTrustCatFile: hFile=0000000000000930 pwszName=\Device\HarddiskVolume4\Windows\System32\NetSetupShim.dll
supR3HardNtViCallWinVerifyTrustCatFile: Cached context 0000000001433810
supR3HardNtViCallWinVerifyTrustCatFile: hCatAdmin=0000000001433810
supR3HardNtViCallWinVerifyTrustCatFile: cbHash=20 wszDigest=592E7D18568150098B2F131AD72F2156D1CA3A58
验证失败时,以下为同一文件:

supR3HardNtViCallWinVerifyTrustCatFile: hFile=0000000000000808 pwszName=\Device\HarddiskVolume4\Windows\System32\NetSetupShim.dll
supR3HardNtViCallWinVerifyTrustCatFile: Cached context 00000000019efab0
supR3HardNtViCallWinVerifyTrustCatFile: hCatAdmin=00000000019efab0
supR3HardNtViCallWinVerifyTrustCatFile: cbHash=20 wszDigest=592E7D18568150098B2F131AD72F2156D1CA3A58
supR3HardNtViCallWinVerifyTrustCatFile: Retrying with fresh context (CryptCATAdminEnumCatalogFromHash -> 1062; iCat=0x0)
supR3HardNtViCallWinVerifyTrustCatFile: New context 00000000019ef030
supR3HardNtViCallWinVerifyTrustCatFile: hCatAdmin=00000000019ef030
supR3HardNtViCallWinVerifyTrustCatFile: cbHash=20 wszDigest=592E7D18568150098B2F131AD72F2156D1CA3A58
supR3HardNtViCallWinVerifyTrustCatFile: CryptCATAdminEnumCatalogFromHash failed ERROR_NOT_FOUND (1062)
supR3HardNtViCallWinVerifyTrustCatFile: Cached context 00000000019eef70
supR3HardNtViCallWinVerifyTrustCatFile: hCatAdmin=00000000019eef70
supR3HardNtViCallWinVerifyTrustCatFile: cbHash=32 wszDigest=668C2310EFB19B6732352E1B4C6B047E3037FC14D9878DA0CC690CFA6D37CE20
supR3HardNtViCallWinVerifyTrustCatFile: Retrying with fresh context (CryptCATAdminEnumCatalogFromHash -> 1062; iCat=0x0)
supR3HardNtViCallWinVerifyTrustCatFile: New context 00000000019efab0
supR3HardNtViCallWinVerifyTrustCatFile: hCatAdmin=00000000019efab0
supR3HardNtViCallWinVerifyTrustCatFile: cbHash=32 wszDigest=668C2310EFB19B6732352E1B4C6B047E3037FC14D9878DA0CC690CFA6D37CE20
supR3HardNtViCallWinVerifyTrustCatFile: CryptCATAdminEnumCatalogFromHash failed ERROR_NOT_FOUND (1062)
supR3HardNtViCallWinVerifyTrustCatFile -> -22900 (org 22900)
可以看出,在这两种情况下,文件的计算摘要等是相同的:

supr3hardtvicallwinverifytrustcatfile:cbHash=20 wszDigest=592E7D18568150098B2F131AD72F2156D1CA3A58

vs

supr3hardtvicallwinverifytrustcatfile:cbHash=20 wszDigest=592E7D18568150098B2F131AD72F2156D1CA3A58

所以它实际上是同一个文件,并证明签名信息在Windows目录中是可用的。似乎只是由于某些原因,没有为受限用户找到/枚举它,因此记录了以下错误:

supR3HardNtViCallWinVerifyTrustCatFile: Retrying with fresh context (CryptCATAdminEnumCatalogFromHash -> 1062; iCat=0x0)
supR3HardNtViCallWinVerifyTrustCatFile: CryptCATAdminEnumCatalogFromHash failed ERROR_NOT_FOUND (1062)
根据1062可能如下所示:

ERROR_SERVICE_NOT_ACTIVE
1062 (0x426)
The service has not been started.
知道在受限制的非交互用户和被调用用户的上下文中,非活动服务可能是什么吗?关于此问题的根本原因还有其他想法吗?