c++ - 处理 GetSidIdentifierAuthority 函数的返回值

标签 c++ windows winapi

我正在使用 GetSidIdentifierAuthority 函数进行某些操作,它返回给我一个指针。完成后,我想释放这个指针。但是,每当我试图释放它时,它都会立即崩溃。

PSID_IDENTIFIER_AUTHORITY pSid= NULL;
EXPLICIT_ACCESS *pEa= NULL;
PACL pACL = NULL;
ULONG eaSize = 0;
DWORD dwRes = 0;
//some initialization
dwRes = GetExplicitEntriesFromAcl(pACL, &eaSize, &pEa);
pSid= GetSidIdentifierAuthority(pEa[0].Trustee.ptstrName);
//Here GetLastError returns sucess
LocalFree((HLOCAL)pEa); //This call success
LocalFree((HLOCAL)pACL); //This call success
LocalFree(pSid); //This call crushes

在我看来,由于这是一个指针并且 GetSidIdentifierAuthority 已经返回,它应该由我释放,但我无法做到。这里可能出了什么问题?

最佳答案

获取SidIdentifierAuthority

https://msdn.microsoft.com/en-us/library/windows/desktop/aa446655(v=vs.85).aspx

GetSidIdentifierAuthority 函数返回指向 SID_IDENTIFIER_AUTHORITY 结构的指针指定的安全标识符 (SID) 中。

pSid 只是指向 pEa 中的内存。由于您释放了 pEa,pSid 指向的内存已经消失,释放 pSid 将导致崩溃。

不要在代码中释放 pSid,它不是新的内存块。

关于c++ - 处理 GetSidIdentifierAuthority 函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36930567/

相关文章:

c++ - C++11 标准中的核心常量表达式是什么?

java - 在 Windows XP 上获取 Apppath

c++ - C 风格、C++ 流或 Win32 API 文件 I/O?

c - 如何改变ATL控件的默认宽高?

c - 请问 MessageBox() "eat"我的用户自定义消息?

c++ - 我如何使用 ifstream 使用下面的 fread() 之类的语句?

c++ - 如何从非直接基类继承构造函数?

c++ - 我如何从 lua5.1 (luajit) 的 lua CFunctions 中提取 lightuserdata?

windows - 如何在 Windows 上使用 freeglut 制作 Haskell GLUT?

python - GridSearchCV 在任何 n_jobs 的窗口上卡住