求助 DLL 中使用外部变量,或者打开文件。。???

休闲人生 2011-11-10 02:35:04
我编写一个DLL,主要是写了几个钩子函数,对createfile进行了挂钩。
但是我向在createfile的时候,先进行一些条件的的判断,这些条件是从一个文件中打开得到的。

问题:

当我是用fopen打开文件的时候,没有提示打开错误,也没有成功打开文件(没有我写的输出)
代码主要的问题出现在这里:(这里是钩子函数)

HANDLE WINAPI HookCreateFileW( LPCWSTR lpFileName,

DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile)
{
//cout<<(char*)lpFileName<<endl;

const TCHAR *name=NULL;
std::wstring FileName=lpFileName;

name = FileName.c_str();

cout<<"Open funciotn"<<endl;(这一句输出很多,然后停止)????????

FILE *fp;
cout<<"fopen..\n";
fp=fopen("test_rules.txt","r"); (Open文件,文件存放在当前目录下)
if(fp==NULL){
cout<<"Open error...\n";
}

cout<<"Open file OK..\n"; 没有输出???????

//---------------------------------------------------------
// 继续创建该文件
return SysCreateFileW( lpFileName, dwDesiredAccess,dwShareMode,
lpSecurityAttributes,dwCreationDisposition,
dwFlagsAndAttributes,hTemplateFile );
}


我创建文件的时候使用
hIn = CreateFile("test1.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING|CREATE_NEW,0,NULL);

这里使用char *的“test1.txt”,但是HookCreateFileW()这个函数的第一个参数是LPCWSTR类型,这个参数传递中间发生了什么?

我使用他的目的是,利用文件名查找规则(规则是从一个文件中读入[打开的时候出错,望得到帮助,解决之]),然后进行规则的判断,然后真正create文件。。。?

希望各位帮忙,时间很紧。。。


谢谢




...全文
109 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
休闲人生 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zpc38368330 的回复:]
是不是钩错函数了?
CHAR 是ASCII码,你钩的函数名字HookCreateFileW,这个名字最后一个字母是W,这个API应该是双字节UNICODE字符的吧,当你CreateFile("test1.txt",。。。);的时间,默认是传入ASCII码的字符串"test1.txt",所以没有调用到CreateFileW函数,估计如果有CreateFileA这个API函数的话,你创建文件的那段代……
[/Quote]

这个方法不起作用
zpc38368330 2011-11-10
  • 打赏
  • 举报
回复
是不是钩错函数了?
CHAR 是ASCII码,你钩的函数名字HookCreateFileW,这个名字最后一个字母是W,这个API应该是双字节UNICODE字符的吧,当你CreateFile("test1.txt",。。。);的时间,默认是传入ASCII码的字符串"test1.txt",所以没有调用到CreateFileW函数,估计如果有CreateFileA这个API函数的话,你创建文件的那段代码调用的API应该是CreateFileA这个函数
解决办法,HOOKCreateFileA这个函数试试
2,hIn = CreateFile("test1.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING|CREATE_NEW,0,NULL);
这段代码把 ”test1.txt"改成UNICODE字符试试,我很长时间没用VC了,记不清怎么改,VS是用(L"TEST1.TXT",.....),VC忘了- -!
你可以百度一下试试,不麻烦- -

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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