问题:关于由HANDLE获取文件名的问题
PFILE_NAME_INFORMATION pfni;
pfni=(PFILE_NAME_INFORMATION)ExAllocatePool(PagedPool, sizeof(FILE_NAME_INFORMATION) + 255 * sizeof(WCHAR) );
memset(pfni,0,sizeof(FILE_NAME_INFORMATION) + 255 * sizeof(WCHAR));
status=ZwQueryInformationFile(p1,&IoStatus,pfni,sizeof(OBJECT_NAME_INFORMATION),FileNameInformation);
我是这样获取文件名的,问题是无法获取中文的文件名.
回答1:
status=ZwQueryInformationFile(p1,&IoStatus,pfni,sizeof(OBJECT_NAME_INFORMATION),FileNameInformation);[/quote]
调用好像有问题,WDK里面是这样定义:
NTSTATUS
ZwQueryInformationFile(
IN HANDLE FileHandle,
OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID FileInformation,
IN ULONG Length,
IN FILE_INFORMATION_CLASS FileInformationClass
);
Length: The size, in bytes, of the buffer pointed to by FileInformation.
回答2:
写错了应该是
status=ZwQueryInformationFile(p1,&IoStatus,pfni,sizeof(FILE_NAME_INFORMATION) + 255 * sizeof(WCHAR),FileNameInformation);
英文的文件名显示无问题,但是中午就是"??.xxx"这样,没有办法吗
回答3:
okay,也就是说文件名是取出来了,但是显示不出来。你在哪里显示?
回答4:
这样:
DbgPrint("%S/n",pfni->FileName);//
回答5:
晕,这样显然不能显示中文阿...中文不是这么简单就能显示的,呵呵
回答6:
搞定了,
RtlInitUnicodeString(&un,pfni->FileName);
RtlUnicodeStringToAnsiString(&an,&un,TRUE);
DbgPrint("%s %d/n",an.Buffer,an.Length);
把wchar转换成char就可以显示了