gpt4 book ai didi

c - SHFileOperation:删除文件时随机引发异常

转载 作者:太空狗 更新时间:2023-10-29 15:05:18 30 4
gpt4 key购买 nike

我正在使用 SHFileOperation() 从特定路径删除目录。它是在多个线程中完成的,删除的目录总是不同的。

有时,它会抛出异常:

Exception thrown at 0x00007FF8AF5D9D2A (ntdll.dll) in del.exe: 0xC0000008: An invalid handle was specified

还有这个:

Exception thrown at 0x00007FF8ACC90A36 (shell32.dll) in del.exe: 0xC0000005: Access violation reading location 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 末尾有一个双空终止符。

这些异常的原因可能是什么?

编辑

堆栈跟踪:

enter image description here

最佳答案

从堆栈跟踪(即使没有 pdb 符号 - 有它会更好)可见异常不在 Windows shell 本身内部,而是在第三方产品 - dragext64.dll(这不是 native Windows 图像)这是工具 Copy Hook Handler - 我建议卸载它或通过注册表项禁用

HKEY_CLASSES_ROOT
Directory
shellex
CopyHookHandlers
MyCopyHandler
(Default) = {MyCopyHandler CLSID GUID}

然后测试。认为异常(exception)必须消失。


另外一些 shell 扩展看起来也有错误 - 在 google SHELL32_CallFileCopyHooks 中搜索。例如 bug TortoiseGit.dll - 请注意堆栈跟踪中的此处 shell32.dll!SHELL32_CallFileCopyHooks()

所以所有这些错误都在 ICopyHook::CopyCallback 的实现中方法

关于c - SHFileOperation:删除文件时随机引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44025382/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com