LookupAccountSid()中出现错误0x8007000e
Error 0x8007000e in LookupAccountSid()
我有一个相当旧的VS6应用程序,它在调用LookupAccountSid时生成错误0x8007000E(error_OUTOFEMORY"没有足够的存储空间来完成此操作。")。
失败的调用只是试图确定缓冲区需要有多大才能在对LookupAccountSid:的第二次调用中使用
std::string GetNameFromSID(PSID pSid)
{
if (NULL == pSid)
return "";
DWORD _dwName; //Size of the name in TCHARs
DWORD _dwDomain; //Size of the domain in TCHARs
SID_NAME_USE _use; //Usage type of the name (user,group etc).
BOOL _b;
//Determine the buffer sizes we require
SetLastError(0);
_b = LookupAccountSid( NULL, pSid, NULL, &_dwName, NULL, &_dwDomain, &_use );
if ( !_b ) {
DWORD _dw = GetLastError();
if ( ERROR_NONE_MAPPED == _dw ) {
//There is no name for this SID
return "";
} else if ( ERROR_INSUFFICIENT_BUFFER == _dw ) {
//This is expected.
} else if ( S_OK != _dw ) {
//This is where we see ERROR_OUTOFMEMORY
return "";
}
}
//Do some other stuff here...
}
我所期望的是错误0x8007007A:error_INSUFFIENT_BUFFER"传递给系统调用的数据区域太小。"这表明我(毫不奇怪)需要分配更大的缓冲区。
这个系统的内存一点也不低,所以有人能提出原因吗?
如果将_dwName
和_dwDomain
正确初始化为0,则查看它是否有效。
堆栈上可能有一些随机垃圾,但根据http://msdn.microsoft.com/en-us/library/windows/desktop/aa379166(v=vs.85).aspx这些必须实际设置为0才能接收所需的缓冲区大小
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- LookupAccountSid()中出现错误0x8007000e