Win7 x64 删除文件调用什么api

Lyinsc 2013-06-19 04:53:52
Win 7 x64系统中删除文件调用什么api,比如用键盘上的delete键删除文件时,调用的是什么api函数啊?
...全文
277 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2013-06-21
  • 打赏
  • 举报
回复
引用 16 楼 Saleayas 的回复:
[quote=引用 14 楼 adlay 的回复:] 我在 64 位下验证过了, explorer 在直接按 DELETE 把文件放入回收站是不会调用 DeleteFile 的, 按 Shift + DELETE 直接删除文件, 会调用 DeleteFileW, 调用堆栈为:

Child-SP          RetAddr           Call Site
00000000`1193ebb8 000007fe`fe4bb573 kernel32!DeleteFileW
00000000`1193ebc0 000007fe`fe5a490d SHELL32!SHDeleteFilePidl+0x13
00000000`1193ebf0 000007fe`fe3bac5c SHELL32!CFSTransfer::RemoveItem+0x159
00000000`1193ec70 000007fe`fe40d17a SHELL32!CRemoveOperation::Do+0x46
00000000`1193ecb0 000007fe`fe40db25 SHELL32!CCopyWorkItem::_DoOperation+0x42
00000000`1193ed20 000007fe`fe40e566 SHELL32!CCopyWorkItem::_SetupAndPerformOp+0x317
00000000`1193f000 000007fe`fe40e303 SHELL32!CCopyWorkItem::ProcessWorkItem+0x28e
00000000`1193f330 000007fe`fe40d576 SHELL32!CRecursiveFolderOperation::Do+0x30c
00000000`1193f3d0 000007fe`fe40ec77 SHELL32!CFileOperation::_EnumRootDo+0x24d
00000000`1193f490 000007fe`fe623740 SHELL32!CFileOperation::PrepareAndDoOperations+0x320
00000000`1193f580 000007fe`fe5e519e SHELL32!CFileOperation::PerformOperations+0x1e0
00000000`1193f5e0 000007fe`fe5f1466 SHELL32!DeleteItemsInDataObject+0xee
00000000`1193f660 000007fe`ff9dc71e SHELL32!DeleteItemsThreadProc+0x6a
00000000`1193f6b0 00000000`7763652d SHLWAPI!WrapperThreadProc+0x19b
00000000`1193f7b0 00000000`7776c521 kernel32!BaseThreadInitThunk+0xd
00000000`1193f7e0 00000000`00000000 ntdll!RtlUserThreadStart+0x1d
请问这个是什么工具分析出来的。 有支持 Windows Server 2012 的版本吗?[/quote] WinDbg, 2012 有什么特别的吗? windows 的程序都是兼容的呀.
Saleayas 2013-06-21
  • 打赏
  • 举报
回复
引用 14 楼 adlay 的回复:
我在 64 位下验证过了, explorer 在直接按 DELETE 把文件放入回收站是不会调用 DeleteFile 的, 按 Shift + DELETE 直接删除文件, 会调用 DeleteFileW, 调用堆栈为:

Child-SP          RetAddr           Call Site
00000000`1193ebb8 000007fe`fe4bb573 kernel32!DeleteFileW
00000000`1193ebc0 000007fe`fe5a490d SHELL32!SHDeleteFilePidl+0x13
00000000`1193ebf0 000007fe`fe3bac5c SHELL32!CFSTransfer::RemoveItem+0x159
00000000`1193ec70 000007fe`fe40d17a SHELL32!CRemoveOperation::Do+0x46
00000000`1193ecb0 000007fe`fe40db25 SHELL32!CCopyWorkItem::_DoOperation+0x42
00000000`1193ed20 000007fe`fe40e566 SHELL32!CCopyWorkItem::_SetupAndPerformOp+0x317
00000000`1193f000 000007fe`fe40e303 SHELL32!CCopyWorkItem::ProcessWorkItem+0x28e
00000000`1193f330 000007fe`fe40d576 SHELL32!CRecursiveFolderOperation::Do+0x30c
00000000`1193f3d0 000007fe`fe40ec77 SHELL32!CFileOperation::_EnumRootDo+0x24d
00000000`1193f490 000007fe`fe623740 SHELL32!CFileOperation::PrepareAndDoOperations+0x320
00000000`1193f580 000007fe`fe5e519e SHELL32!CFileOperation::PerformOperations+0x1e0
00000000`1193f5e0 000007fe`fe5f1466 SHELL32!DeleteItemsInDataObject+0xee
00000000`1193f660 000007fe`ff9dc71e SHELL32!DeleteItemsThreadProc+0x6a
00000000`1193f6b0 00000000`7763652d SHLWAPI!WrapperThreadProc+0x19b
00000000`1193f7b0 00000000`7776c521 kernel32!BaseThreadInitThunk+0xd
00000000`1193f7e0 00000000`00000000 ntdll!RtlUserThreadStart+0x1d
请问这个是什么工具分析出来的。 有支持 Windows Server 2012 的版本吗?
Saleayas 2013-06-21
  • 打赏
  • 举报
回复
请教一下 WinDbg 如果得到上面的调用堆栈的! 不好意思,我只会简单的命令。
Saleayas 2013-06-21
  • 打赏
  • 举报
回复
我以为是 上面说的 SoftSnoop。我一直就用不了这个。 查看 API 我一直用 API Monitor。
Lyinsc 2013-06-19
  • 打赏
  • 举报
回复
引用 14 楼 adlay 的回复:
我在 64 位下验证过了, explorer 在直接按 DELETE 把文件放入回收站是不会调用 DeleteFile 的, 按 Shift + DELETE 直接删除文件, 会调用 DeleteFileW, 调用堆栈为:

Child-SP          RetAddr           Call Site
00000000`1193ebb8 000007fe`fe4bb573 kernel32!DeleteFileW
00000000`1193ebc0 000007fe`fe5a490d SHELL32!SHDeleteFilePidl+0x13
00000000`1193ebf0 000007fe`fe3bac5c SHELL32!CFSTransfer::RemoveItem+0x159
00000000`1193ec70 000007fe`fe40d17a SHELL32!CRemoveOperation::Do+0x46
00000000`1193ecb0 000007fe`fe40db25 SHELL32!CCopyWorkItem::_DoOperation+0x42
00000000`1193ed20 000007fe`fe40e566 SHELL32!CCopyWorkItem::_SetupAndPerformOp+0x317
00000000`1193f000 000007fe`fe40e303 SHELL32!CCopyWorkItem::ProcessWorkItem+0x28e
00000000`1193f330 000007fe`fe40d576 SHELL32!CRecursiveFolderOperation::Do+0x30c
00000000`1193f3d0 000007fe`fe40ec77 SHELL32!CFileOperation::_EnumRootDo+0x24d
00000000`1193f490 000007fe`fe623740 SHELL32!CFileOperation::PrepareAndDoOperations+0x320
00000000`1193f580 000007fe`fe5e519e SHELL32!CFileOperation::PerformOperations+0x1e0
00000000`1193f5e0 000007fe`fe5f1466 SHELL32!DeleteItemsInDataObject+0xee
00000000`1193f660 000007fe`ff9dc71e SHELL32!DeleteItemsThreadProc+0x6a
00000000`1193f6b0 00000000`7763652d SHLWAPI!WrapperThreadProc+0x19b
00000000`1193f7b0 00000000`7776c521 kernel32!BaseThreadInitThunk+0xd
00000000`1193f7e0 00000000`00000000 ntdll!RtlUserThreadStart+0x1d
哦,这样啊,Thank you very much!
www_adintr_com 2013-06-19
  • 打赏
  • 举报
回复
我在 64 位下验证过了, explorer 在直接按 DELETE 把文件放入回收站是不会调用 DeleteFile 的, 按 Shift + DELETE 直接删除文件, 会调用 DeleteFileW, 调用堆栈为:

Child-SP          RetAddr           Call Site
00000000`1193ebb8 000007fe`fe4bb573 kernel32!DeleteFileW
00000000`1193ebc0 000007fe`fe5a490d SHELL32!SHDeleteFilePidl+0x13
00000000`1193ebf0 000007fe`fe3bac5c SHELL32!CFSTransfer::RemoveItem+0x159
00000000`1193ec70 000007fe`fe40d17a SHELL32!CRemoveOperation::Do+0x46
00000000`1193ecb0 000007fe`fe40db25 SHELL32!CCopyWorkItem::_DoOperation+0x42
00000000`1193ed20 000007fe`fe40e566 SHELL32!CCopyWorkItem::_SetupAndPerformOp+0x317
00000000`1193f000 000007fe`fe40e303 SHELL32!CCopyWorkItem::ProcessWorkItem+0x28e
00000000`1193f330 000007fe`fe40d576 SHELL32!CRecursiveFolderOperation::Do+0x30c
00000000`1193f3d0 000007fe`fe40ec77 SHELL32!CFileOperation::_EnumRootDo+0x24d
00000000`1193f490 000007fe`fe623740 SHELL32!CFileOperation::PrepareAndDoOperations+0x320
00000000`1193f580 000007fe`fe5e519e SHELL32!CFileOperation::PerformOperations+0x1e0
00000000`1193f5e0 000007fe`fe5f1466 SHELL32!DeleteItemsInDataObject+0xee
00000000`1193f660 000007fe`ff9dc71e SHELL32!DeleteItemsThreadProc+0x6a
00000000`1193f6b0 00000000`7763652d SHLWAPI!WrapperThreadProc+0x19b
00000000`1193f7b0 00000000`7776c521 kernel32!BaseThreadInitThunk+0xd
00000000`1193f7e0 00000000`00000000 ntdll!RtlUserThreadStart+0x1d
Lyinsc 2013-06-19
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
[quote=引用 6 楼 szxy5629ly 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] 推荐使用SoftSnoop软件查看另一个程序在完成某个功能时调用了哪些API。
支持64位的系统吗[/quote] 没在64位系统用过,不知道。 procmon好象支持64位。[/quote] 好像会用了,不过没有看到我想看到的结果
Lyinsc 2013-06-19
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
[quote=引用 6 楼 szxy5629ly 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] 推荐使用SoftSnoop软件查看另一个程序在完成某个功能时调用了哪些API。
支持64位的系统吗[/quote] 没在64位系统用过,不知道。 procmon好象支持64位。[/quote] procmon支持64位的系统,不过不知道怎么用啊?运行后一直在显示events,就没停过。 能给我说说,怎么监控explorer.exe,怎么看到当前的删除文件操作调用的函数吗?那么的操作多被列出来了,我从何看起啊......
Lyinsc 2013-06-19
  • 打赏
  • 举报
回复
引用 10 楼 Saleayas 的回复:
SHFileOperation ??
我一看到这样的函数就头疼,不知道如何hook啊,64位还是32位的函数啊?
Saleayas 2013-06-19
  • 打赏
  • 举报
回复
SHFileOperation ??
赵4老师 2013-06-19
  • 打赏
  • 举报
回复
引用 6 楼 szxy5629ly 的回复:
[quote=引用 4 楼 zhao4zhong1 的回复:] 推荐使用SoftSnoop软件查看另一个程序在完成某个功能时调用了哪些API。
支持64位的系统吗[/quote] 没在64位系统用过,不知道。 procmon好象支持64位。
Lyinsc 2013-06-19
  • 打赏
  • 举报
回复
引用 7 楼 adlay 的回复:
64 位程序和 32 位程序用的是不同的 dll
这个我知道,我就是不知道x64的系统调用的是64位的还是32位的啊
www_adintr_com 2013-06-19
  • 打赏
  • 举报
回复
64 位程序和 32 位程序用的是不同的 dll
Lyinsc 2013-06-19
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
推荐使用SoftSnoop软件查看另一个程序在完成某个功能时调用了哪些API。
支持64位的系统吗
Lyinsc 2013-06-19
  • 打赏
  • 举报
回复
没问题了,我搞一个x64版本的detours.lib,能搞定Win 7 x64下的notepad调用的CreateFileW函数了, 所以我确定我的方法没什么问题。 现在就是想知道x64系统都调用哪些文件操作函数来完成删除之类的操作,这些函数是64位的函数还是32位的函数。
赵4老师 2013-06-19
  • 打赏
  • 举报
回复
推荐使用SoftSnoop软件查看另一个程序在完成某个功能时调用了哪些API。
www_adintr_com 2013-06-19
  • 打赏
  • 举报
回复
你 64 位下钩子的方法跑通了没得问题了?
Lyinsc 2013-06-19
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
难道 DeleteFile 不行?
嗨,又见面了 我hook DeleteFileW和DeleteFileA都没反应,有没有什么软件可以跟踪一下啊?
www_adintr_com 2013-06-19
  • 打赏
  • 举报
回复
难道 DeleteFile 不行?

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧