0
我有一個C++程序作爲「NT Authority \ System」下的系統服務運行。GetNamedSecurityInfo間歇性故障,錯誤= 2
該程序有多個線程,每個線程偶爾會喚醒並嘗試加載指定路徑的ACL。我遇到的問題是,我零星地看到GetNamedSecurityInfo()調用失敗,錯誤= 2,文件未找到。奇怪的是,這個調用會在相同的路徑上成功一段時間,然後發生一些事情,然後調用就會失敗。
我的代碼看起來是這樣的:
SE_OBJECT_TYPE dwObjectType = SE_FILE_OBJECT;
LPTSTR szFile = _T("\\\\server\\share\\folder");
DWORD dwError = ::GetNamedSecurityInfo(szFile, dwObjectType, DACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION, 0, 0, &pDacl, 0, (void**)&pSD);
if (dwError || !pDacl)
{
TRACE(_T("Error=%d\n"),dwError);
// try it again, maybe I was impersonating a different AD user by mistake.
::RevertToSelf();
dwError = ::GetNamedSecurityInfo(szFile, dwObjectType, DACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION, 0, 0, &pDacl, 0, (void**)&pSD);
TRACE(_T("Error=%d\n"),dwError);
}
我一直在打我的頭靠在牆上幾天就這一個和任何幫助,將不勝感激。
謝謝!
哦,並且我已驗證該服務可以訪問\\ server \ share \以及該文件夾。該文件夾確實存在。通話在大多數情況下都很有效,然後直到我重新啓動服務時纔會失敗。 – WebDrive
與哪個登錄會話luid關聯的'\\ server \ share'?並且當你調用GetNamedSecurityInfo *時,你有什麼令牌? – RbMm
服務在「NT Authority \ System」下登錄。 「共享」上的NTFS ACL擁有擁有完整權限的所有人;並且共享引用的C:\上的基礎目錄也具有包含Everyone/Full權限的NTFS ACL。 – WebDrive