ConvertStringSecurityDescriptorToSecurityDescriptor()阻止我的程序正常结束

时间:2013-07-06 17:52:43

标签: c++ security winapi

我发现函数ConvertStringSecurityDescriptorToSecurityDescriptor()阻止我的程序正常结束。即使我拨打ExitProcess(0),我的程序也会在后台保持打开状态。如果我删除此功能,程序将正常结束。

在调试器的帮助下,我发现这个函数创建了一个在此函数结束后保持打开的新线程。

如何强制此函数正常运行并关闭它打开的所有线程?

我的代码:

int main() {
  PSECURITY_DESCRIPTOR d;
  // program has 1 thread
  ConvertStringSecurityDescriptorToSecurityDescriptorW(L".....", SDDL_REVISION_1, &d, NULL);
  // program has 2 threads
  return 0; // still running in background after this
}

1 个答案:

答案 0 :(得分:1)

您将d定义为PSECURITY_DESCRIPTOR而不是SECURITY_DESCRIPTOR,因此代码将指针指针传递给SECURITY_DESCRIPTOR,而不是只是指向一个指针 - SECURITY_DESCRIPTOR。这会搞砸内存,可能是导致死机的原因。

查看示例Creating a DACL。它在堆栈上分配SECURITY_DESCRIPTOR,并在调用nLength之前初始化字段bInheritHandleConvertStringSecurityDescriptorToSecurityDescriptor。此外,应LocalFree而不是d.lpSecurityDescriptor调用d