初学者!error:1是什么东东? DeviceIoControl小弟我想初始化USN日志
菜鸟求助!error:1是什么错误? DeviceIoControl我想初始化USN日志
我想初始化USN日志文件:
/**
* step 03. 初始化USN日志文件
*/
#include<stdio.h>
#include<iostream>
#include<windows.h>
#include <winioctl.h>
#include<string.h>
using namespace std;
#define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS) // CREATE_USN_JOURNAL_DATA,
typedef struct {
DWORDLONG MaximumSize;
DWORDLONG AllocationDelta;
} CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA;
int main()
{
char fileName[225];
char volName[10]="C:\\";
fileName[0]='\0';
strcpy(fileName,"\\\\.\\");
strcat(fileName,volName);
string fileNameStr=(string)fileName;
fileNameStr.erase(fileNameStr.find_last_of(":")+1);
//获得磁盘驱动器句柄
HANDLE hVol=CreateFileA(fileNameStr.data(),
0,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_READONLY,
NULL);
if(hVol==INVALID_HANDLE_VALUE)printf("获取驱动盘句柄失败--handle:%x error:%d\n",hVol,GetLastError());
else printf("success\n");
DWORD br;
CREATE_USN_JOURNAL_DATA cujd;
cujd.MaximumSize = 0; // 0表示使用默认值
cujd.AllocationDelta = 0; // 0表示使用默认值
//初始化USN日志文件
BOOL status = DeviceIoControl(hVol,
FSCTL_CREATE_USN_JOURNAL,
&cujd,
sizeof(cujd),
NULL,
0,
&br,
NULL);
if(0!=status){
printf("success\n");
}else{
printf("初始化USN日志文件失败 —— status:%x error:%d\n", status, GetLastError());
}
return 0;
}
最后运行结果这是:初始化USN日志失败,error:1
在dev和VC6.0下都这样
------解决方案--------------------
BOOL status = DeviceIoControl(hVol,
FSCTL_CREATE_USN_JOURNAL,
&cujd,
sizeof(cujd),
&cujd,
sizeof(cujd),
&br,
FALSE);
这样试试 不行的话 看看 这个FSCTL_CREATE_USN_JOURNAL 用得对不对 应该还有别的把~ 多试试 就差不多了
------解决方案--------------------
你把CreateFileA()第一个参数 直接用“\\\\.\\C:”这种 看看 可能我给的不对啊 你自己校队一下
------解决方案--------------------
在网上 找找吧 没弄过USN 但你的错误基本就是这一类的 在网上好好找找吧
写程序就是这样的 。 就是遇到问题 解决问题 在遇到问题 在解决
我想初始化USN日志文件:
/**
* step 03. 初始化USN日志文件
*/
#include<stdio.h>
#include<iostream>
#include<windows.h>
#include <winioctl.h>
#include<string.h>
using namespace std;
#define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS) // CREATE_USN_JOURNAL_DATA,
typedef struct {
DWORDLONG MaximumSize;
DWORDLONG AllocationDelta;
} CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA;
int main()
{
char fileName[225];
char volName[10]="C:\\";
fileName[0]='\0';
strcpy(fileName,"\\\\.\\");
strcat(fileName,volName);
string fileNameStr=(string)fileName;
fileNameStr.erase(fileNameStr.find_last_of(":")+1);
//获得磁盘驱动器句柄
HANDLE hVol=CreateFileA(fileNameStr.data(),
0,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_READONLY,
NULL);
if(hVol==INVALID_HANDLE_VALUE)printf("获取驱动盘句柄失败--handle:%x error:%d\n",hVol,GetLastError());
else printf("success\n");
DWORD br;
CREATE_USN_JOURNAL_DATA cujd;
cujd.MaximumSize = 0; // 0表示使用默认值
cujd.AllocationDelta = 0; // 0表示使用默认值
//初始化USN日志文件
BOOL status = DeviceIoControl(hVol,
FSCTL_CREATE_USN_JOURNAL,
&cujd,
sizeof(cujd),
NULL,
0,
&br,
NULL);
if(0!=status){
printf("success\n");
}else{
printf("初始化USN日志文件失败 —— status:%x error:%d\n", status, GetLastError());
}
return 0;
}
最后运行结果这是:初始化USN日志失败,error:1
在dev和VC6.0下都这样
------解决方案--------------------
BOOL status = DeviceIoControl(hVol,
FSCTL_CREATE_USN_JOURNAL,
&cujd,
sizeof(cujd),
&cujd,
sizeof(cujd),
&br,
FALSE);
这样试试 不行的话 看看 这个FSCTL_CREATE_USN_JOURNAL 用得对不对 应该还有别的把~ 多试试 就差不多了
------解决方案--------------------
你把CreateFileA()第一个参数 直接用“\\\\.\\C:”这种 看看 可能我给的不对啊 你自己校队一下
------解决方案--------------------
在网上 找找吧 没弄过USN 但你的错误基本就是这一类的 在网上好好找找吧
写程序就是这样的 。 就是遇到问题 解决问题 在遇到问题 在解决