我正在使用 SHFileOperation() 从特定路径中删除目录。它是在多个线程中完成的,并且被删除的目录总是不同的。
有时,它会抛出异常:
del.exe 中的 0x00007FF8AF5D9D2A (ntdll.dll) 引发异常:0xC0000008:指定了无效句柄
和这个:
在 del.exe 中的 0x00007FF8ACC90A36 (shell32.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x0000000000000001。
模块:
shell32.dll 00007FF8ACBD0000-00007FF8AE0D8000
ntdll.dll 00007FF8AF530000-00007FF8AF701000
这是代码:
SHFILEOPSTRUCTW tFileOptions = { 0 };
/* Initialize the file options structure for the deletion process */
tFileOptions.pFrom = pwstrPath;
tFileOptions.wFunc = FO_DELETE;
tFileOptions.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI;
/* Execute the deletions with the Shell operation */
iResult = SHFileOperationW(&tFileOptions);
if (0 != iResult)
{
printf("WTF\n");
goto lbl_cleanup;
}
SHChangeNotify(SHCNE_RMDIR, SHCNF_PATHW, pwstrPath, NULL);
pwstrPath 末尾有一个双空终止符。
这些异常的原因是什么?
编辑
堆栈跟踪: