文件操作

85 篇文章 6 订阅
83 篇文章 9 订阅

文件的表示

应用层:”c:\\hi.txt”
内核:L”\\??\\c:\\hi.txt”//??实际上是个符号链接,连接的是卷设备名称->\\device\\harddiskvolume3\\hi.txt
R3:
设备名:L”\\\\.\\xxxDrv”
R0
设备名:”\\device\\xxxDrv”
符号连接名:”\\dosdevices\\xxxDrv”或\\??\\xxxDrv


常用API

ZwCreateFile //集创建文件 文件夹 打开 
ZwWriteFile 
ZwReadFile
ZwQueryInformationFile  //查询文件信息
ZwQueryFullAttributesFile //查询文件属性 比如是不是文件 文件夹
ZwSetInformationFile //设置文件
ZwClose
ZwQueryDirectoryFile //枚举文件


ZwCreateFile(
	&hFile, //文件句柄
	GENERIC_WRITE,//写打开
	&objAttrib,//文件路径 
	&io_status, 
	NULL, 
	FILE_ATTRIBUTE_NORMAL,//普通文件,不是文件夹
	FILE_SHARE_READ | FILE_SHARE_WRITE |FILE_SHARE_DELETE, //非独占
	FILE_OPEN_IF,//如果没有新建
	FILE_SYNCHRONOUS_IO_NONALERT|FILE_NON_DIRECTORY_FILE, //非文件夹
	NULL, 
	0);

ZwReadFile (                                             
        hSrcFile, 
        NULL,
        NULL,
        NULL,                    
        &io_status,
        buffer, 
        PAGE_SIZE,//长度
        &offset,//偏移
        NULL
        );

ZwWriteFile(
        hDstFile,
        NULL,
        NULL,
        NULL,
        &io_status,
        buffer,
        length,
        &offset,
	NULL
	);


 


ZwQueryInformationFile(
		handle, 
		&iosb,
		&basicInfo,
		sizeof(basicInfo),
		FileBasicInformation//FileBasicInformation查询设置文件基本信息
                                    //FileStandardInformation
                                    //FileDispositionInformation
                                    //FilePositionInformation
                                    //FileRenameInformation
		);

 
ZwSetInformationFile(
	handle, 
	&iosb,
        &basicInfo,
        sizeof(basicInfo),
        FileBasicInformation
	);

typedef struct _FILE_BASIC_INFORMATION {
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    ULONG FileAttributes;
} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;

 

 

typedef struct 
_FILE_STANDARD_INFORMATION {
    LARGE_INTEGER AllocationSize;//占有磁盘空间大小
    LARGE_INTEGER EndOfFile;//文件大小
    ULONG NumberOfLinks;
    BOOLEAN DeletePending;
    BOOLEAN Directory;
} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;

 

 

typedef struct _FILE_POSITION_INFORMATION {//文件读写指针的位置
    LARGE_INTEGER CurrentByteOffset;
} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;

 

typedef struct _FILE_RENAME_INFORMATION {   
	BOOLEAN ReplaceIfExists;    
	HANDLE RootDirectory;    
	ULONG FileNameLength;    
	WCHAR FileName[1];
}FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;

 

 

typedef struct _FILE_NETWORK_OPEN_INFORMATION {
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER EndOfFile;
    ULONG FileAttributes;//文件夹还是文件
} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;

 

 

typedef struct _FILE_DISPOSITION_INFORMATION {//删除文件
    BOOLEAN DeleteFile;
} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值