0

別のコンピューターで共有フォルダーのアクセス許可を取得する C++ コードを書いています。「アクセス許可」とは、このフォルダーに対してどのユーザーまたはグループが許可または拒否されているかなどを意味します。

特定のリモート マシン (strServerName という名前で、IP は strServerIP です) の共有フォルダー (strFileName という名前) の NTFS セキュリティ記述子を取得する関数を次に示します。フォルダーにアクセスできない場合、GetNamedSecurityInfo 関数は、アクセスが拒否されたことを意味するエラー コード 5 で失敗します。しかし、「全員」を保持すると、機能は正常に機能します。「全員」が予約されているか、リモート共有フォルダーにないかは保証できません。では、「全員」なしでこの機能を機能させる方法(または権限を確認できる他の方法で問題ありません)?

PSECURITY_DESCRIPTOR ADDirectorySearch::getNTFSSecDescriptor2(CString strFileName, CString strServerName, CString strServerIP)
{
    //CString strServerNameWithSlash = _T("\\\\") + strServerName;//"\\\\veotax3";
    CString strFilePathName = _T("\\\\") + strServerName + _T("\\") + strFileName;//"\\\\veotax3\\nrdc1001";
    CString strFilePathName2 = _T("\\\\") + strServerIP + _T("\\") + strFileName;//"\\\\192.168.1.7\\nrdc1001";
    _bstr_t bstrFilePathName = strFilePathName;

    BOOL bSuccess = FALSE;
    PSECURITY_DESCRIPTOR pSecDescriptorBuf = NULL;
    DWORD dwSizeNeeded = 0;

label2:;
       bSuccess = GetNamedSecurityInfoW(bstrFilePathName, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &pSecDescriptorBuf);
       //bSuccess = GetFileSecurityW(bstrFilePathName, DACL_SECURITY_INFORMATION, NULL, 0, &dwSizeNeeded);
       if (ERROR_SUCCESS != bSuccess)
       {
           if (strFilePathName != strFilePathName2)
           {
               strFilePathName = strFilePathName2;
               bstrFilePathName = strFilePathName2;
               goto label2;
           }
           else
           {
               MyMessageBox_Error(_T("getNTFSSecDescriptor2 Error."), _T("Error"));
               return NULL;
           }
       }
       else
       {
            return pSecDescriptorBuf;
       }
}
4

0 に答える 0