我调用GetNamedSecurityInfo()如下:
PSID pSID = NULL;
PSECURITY_DESCRIPTOR pSD = NULL;
// Retrieve the owner SID for the file
if(GetNamedSecurityInfo(TEXT("myfile.txt"),
SE_FILE_OBJECT,
OWNER_SECURITY_INFORMATION,
&pSID,
NULL, NULL, NULL,
&pSD) != ERROR_SUCCESS) {
/* error handling */
}
FreeSid(pSID);
LocalFree(pSD);
Run Code Online (Sandbox Code Playgroud)
但是,当我运行应用程序时,它崩溃了.调试器报告:Critical error detected c0000374并指向LocalFree()上面代码段末尾的行.
为什么这条线会导致问题?根据ppSecurityDescriptor参数的文档:
"指向接收指向对象安全描述符的指针的变量的指针.当您使用完指针后,通过调用LocalFree函数释放返回的缓冲区."
......这正是我所做的.
pSID本地var 引用的SID 指的是已在所引用的安全描述符中保存的数据pSD.它"拥有"那个SID,你拥有描述符引用.你只需要释放后者.
简短版本:删除FreeSid(pSID)通话.
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |