SetNamedSecurityInfo返回错误代码87的原因排查与解决求助
解决SetNamedSecurityInfo返回错误87(参数不正确)的问题
核心问题分析
- 对象类型参数不匹配:你传入的第二个参数是
SE_FILE_OBJECT,但网络共享资源对应的对象类型应为SE_LMSHARE。SE_FILE_OBJECT仅适用于本地文件、目录这类文件系统对象,用在共享资源上会直接触发参数错误(错误码87)。 - 共享路径格式错误:C++字符串中反斜杠需要转义,你写的
L"//TEST/test"不符合Windows网络路径规范,正确格式应为L"\\\\TEST\\test"。这种格式错误结合对象类型错误,会优先触发参数错误,而非路径不存在的错误67。
修正后的代码示例
LPWSTR shareName = L"\\\\TEST\\test"; DWORD dwRes = SetNamedSecurityInfo(shareName, SE_LMSHARE, SACL_SECURITY_INFORMATION, NULL, NULL, NULL, NULL); if (ERROR_SUCCESS != dwRes) { cout << "Error while setting SACL in SetNamedSecurityInfo Error " << dwRes << endl; return -1; }
额外注意事项
即使修正上述参数,设置SACL还需要进程拥有SE_SECURITY_NAME权限,通常需要以管理员身份运行程序。
内容的提问来源于stack exchange,提问作者Naveen S
相关产品推荐
相关产品推荐

