liangyufei
驱动小牛
驱动小牛
  • 注册日期2006-01-16
  • 最后登录2021-10-12
  • 粉丝0
  • 关注0
  • 积分1019分
  • 威望588点
  • 贡献值2点
  • 好评度95点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1975回复:7

请教何时才能使用ZwCreateFile创建文件

楼主#
更多 发布于:2009-05-15 11:39
各位老大,我写了一个NDIS的驱动,想在驱动里面写文件,但发现如果在DriverEntry里面写文件的话,会导致系统死在那里,无法下去,如果在后面定时器中写文件的话,要等一会儿才能创建成功。请教各位大虾,是否创建文件要有一定的时序,我应该在何时创建?下面是我创建文件的代码,供参考。
  HANDLE    hCacheFile  = NULL;
    WCHAR            wcFileName[MAX_PATH];

    memset(wcFileName,0,sizeof(wcFileName));
    swprintf(wcFileName,L"\\??\\d:\test.cth");

    RtlInitUnicodeString(&usname, wcFileName);    
    InitializeObjectAttributes(&oa, &usname, OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE , NULL, NULL);

    status = ZwCreateFile(&hCacheFile,
        GENERIC_READ|GENERIC_WRITE,
        &oa,
        &iostatus,
        NULL,
        FILE_ATTRIBUTE_NORMAL,
        FILE_SHARE_WRITE|FILE_SHARE_READ,
        FILE_OVERWRITE_IF,
        FILE_SYNCHRONOUS_IO_NONALERT|FILE_NO_INTERMEDIATE_BUFFERING,
        NULL,
        0);
    
    if(!NT_SUCCESS(status))
    {
        //STATUS_INVALID_PARAMETER
        DbgPrint("\n ZwCreateFile=%d,iostatus=%d",status,iostatus.Information);
        return FALSE;
    }

liangyufei
驱动小牛
驱动小牛
  • 注册日期2006-01-16
  • 最后登录2021-10-12
  • 粉丝0
  • 关注0
  • 积分1019分
  • 威望588点
  • 贡献值2点
  • 好评度95点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2009-05-31 18:02
贴了n天也没人关注,难道就没人知道吗?
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
板凳#
发布于:2009-05-31 22:36
At exactly what time your driver was loaded? My guess is that the file system, especailly volume D, was not ready for you when your driver was loaded.
liangyufei
驱动小牛
驱动小牛
  • 注册日期2006-01-16
  • 最后登录2021-10-12
  • 粉丝0
  • 关注0
  • 积分1019分
  • 威望588点
  • 贡献值2点
  • 好评度95点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2009-06-03 11:59
我的驱动加载的时间是比较早,我想知道d盘何时才能用,是否某个服务启动后可以用,还是有别的什么方法得到d盘可用的时间
uljtg
驱动牛犊
驱动牛犊
  • 注册日期2006-03-23
  • 最后登录2011-12-03
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望210点
  • 贡献值0点
  • 好评度46点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-06-05 12:25
如果不是非要在启动的时候创建文件的话,可以考虑IOCONTROL,否则的话可能要通过检查特定符号连接是否已经创建好,我也没试过,只是猜测
liangyufei
驱动小牛
驱动小牛
  • 注册日期2006-01-16
  • 最后登录2021-10-12
  • 粉丝0
  • 关注0
  • 积分1019分
  • 威望588点
  • 贡献值2点
  • 好评度95点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2009-07-29 17:53
我是必须要在启动的时候创建文件的。有哪个大虾知道的帮下忙吧。
mlkflkf
驱动牛犊
驱动牛犊
  • 注册日期2006-06-21
  • 最后登录2019-08-08
  • 粉丝1
  • 关注0
  • 积分13分
  • 威望93点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2009-09-14 10:19
在一个线程中等待可以创建文件或者向系统注册一个回调,如:PsSetCreateProcessNotifyRoutine 都应可以
dywangj
驱动牛犊
驱动牛犊
  • 注册日期2008-08-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望82点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2009-09-15 10:35
zwcreatefile需要在group为file system后面才能使用,否则你无法享受文件的概念,不过DISK本身是比较早就加载的,可以直接操作
游客

返回顶部