FILE_OBJECT结构体

typedef struct _FILE_OBJECT {
    CSHORT Type;
    CSHORT Size;
    PDEVICE_OBJECT DeviceObject;//设备对象
    PVPB Vpb;
    PVOID FsContext;
    PVOID FsContext2;
    PSECTION_OBJECT_POINTERS SectionObjectPointer;
    PVOID PrivateCacheMap;
    NTSTATUS FinalStatus;
    struct _FILE_OBJECT *RelatedFileObject;
    BOOLEAN LockOperation;
    BOOLEAN DeletePending;
    BOOLEAN ReadAccess;
    BOOLEAN WriteAccess;
    BOOLEAN DeleteAccess;
    BOOLEAN SharedRead;
    BOOLEAN SharedWrite;
    BOOLEAN SharedDelete;
    ULONG Flags;
    UNICODE_STRING FileName;
    LARGE_INTEGER CurrentByteOffset;
    ULONG Waiters;
    ULONG Busy;
    PVOID LastLock;
    KEVENT Lock;
    KEVENT Event;
    PIO_COMPLETION_CONTEXT CompletionContext;
} FILE_OBJECT;
  从FILE_OBJECT结构体中的Filename属性可以得到该文件的文件名,例如:abc.exe

 另外从FILE_OBJECT结构体中的步得到该文件的相对路径,例如:  /AAAA/BBBB/CCCC


这样综合起来,我只能得到该文件没有盘符的路径:/AAAA/BBBB/CCCC/abc.exe

得到完整路径的方法
=========================================================================

//相关变量 HANDLE filehandle=0; PFILE_OBJECT file=0; PFILE_OBJECT relatedfile=0;

POBJECT_HANDLE_INFORMATION info=0;  char filefullname_c[1024]; ANSI_STRING filefullname_a; 

UNICODE_STRING filefullname_u; int relatedfilelength; POBJECT_NAME_INFORMATION     

 fileNameInformation;

ULONG retSize; //先得到盘符

RtlVolumeDeviceToDosName(file->DeviceObject,&filefullname_u);

RtlUnicodeStringToAnsiString(&filefullname_a,&filefullname_u,1);

strncpy(filefullname_c,filefullname_a.Buffer,filefullname_a.Length); 

filefullname_c[filefullname_a.Length]='/0';

relatedfilelength=filefullname_a.Length; //相对路径

relatedfile=file->RelatedFileObject;

RtlUnicodeStringToAnsiString(&filefullname_a,&relatedfile->FileName,1);

strncat(filefullname_c,filefullname_a.Buffer,filefullname_a.Length); 

filefullname_c[relatedfilelength+filefullname_a.Length]='/0';

relatedfilelength+=filefullname_a.Length; //文件名

RtlUnicodeStringToAnsiString(&filefullname_a,&file->FileName,1);

strcat(filefullname_c,"//");

strncat(filefullname_c,filefullname_a.Buffer,filefullname_a.Length);

filefullname_c[relatedfilelength+filefullname_a.Length+1]='/0';

 

转自:http://blog.csdn.net/chao272724792/archive/2010/04/20/5505916.aspx

你可能感兴趣的:(c,object,struct,File,Integer,Pointers)