windows api一日一练(dbghelp sdk)-000-EnumDirTreeProc,EnumDirTreeProc

日期:2009-10-13

分类:General

函数:

EnumDirTree:搜索指定路径下的同名文件,可以递归子目录

EnumDirTreeProc:用于上述函数中的一个回调,用于处理一些用户自定义的特殊操作

――――――――下面是代码和注释――――――――――――――――――――

#include "stdafx.h"

#include <Windows.h>

#include <dbghelp.h>

#pragma comment(lib,"dbghelp")

 

BOOL CALLBACK EnumDirTreeProc(LPCTSTR FilePath,PVOID CallerData)

{

   printf("%s,%s/n",FilePath,CallerData);

   return FALSE;

   /*

   2个参数都是由EnumDirTree传进来的

   FilePath是第一次找到的全路径

   CallerDataEnumDirTree的最后一个参数

   用来作为在回调中所需的信息,比如可以用做比较之类的

   返回false则可以继续搜索,否则就stop

   */

}

 

int _tmain(int argc, _TCHAR* argv[])

{

   DWORD  error;

   HANDLE hProcess;

 

   SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS);

 

   hProcess = GetCurrentProcess();

 

   if (SymInitialize(hProcess, NULL, TRUE))

   {

      // SymInitialize returned success

      /*

      BOOL WINAPI EnumDirTree( 搜索文件并返回路径

      __in_opt      HANDLE hProcess,

      __in          PCTSTR RootPath, 开始搜索的路径

      __in          PCTSTR InputPathName, 被搜索文件名

      __out         LPTSTR OutputPathBuffer, 被填充的全路径

      __in          PENUMDIRTREE_CALLBACK Callback, 回调函数

      __in          PVOID CallbackData 回调函数用的到上下文

      );

     

      BOOL CALLBACK EnumDirTreeProc(

      [in]                 LPCTSTR FilePath,

      [in]                 PVOID CallerData

      );

      */

 

      char buf[MAX_PATH];

      buf[0] = _T('/0');

      char bufP[] = _T("lib");

      if(FALSE == EnumDirTree(hProcess,"E://crash","dbghelp.lib",buf,EnumDirTreeProc,(PVOID)bufP))

      {

         // 这里会打印,因为上面的回调是返回false

         printf("EnumDirTree returned error : %d/n", GetLastError());

      }

   }

   else

   {

      // SymInitialize failed

      printf("SymInitialize returned error : %d/n", GetLastError());

   }

 

 

   system("pause");

   return 0;

}

 

Remarks

The search can be canceled if you register a SymRegisterCallbackProc64 callback function. For every file operation, EnumDirTree calls this callback function with CBA_DEFERRED_SYMBOL_LOAD_CANCEL. If the callback function returns TRUE, EnumDirTree cancels the search.

这段英文没看明白到底SymRegisterCallbackProc64跟这个有什么关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值