类 IRtlFile 函数的调用
typedef interface II1 II1;
interface II1
{
public:
virtual HRESULT STDMETHODCALLTYPE GetI1() = 0;
};
typedef interface IRtlFile IRtlFile;
interface IRtlFile
{
public:
virtual HRESULT STDMETHODCALLTYPE destructor() = 0;
virtual HRESULT STDMETHODCALLTYPE CSystemObjectInitialize(CreateObjectSource const &) = 0;
virtual HRESULT __fastcall GetName( PVOID, unsigned long, PLUNICODE_STRING) = 0;
virtual HRESULT STDMETHODCALLTYPE Release() = 0;
virtual HRESULT STDMETHODCALLTYPE CreateInterface(struct _GUID const &, struct IRtlObject *) = 0;
virtual HRESULT STDMETHODCALLTYPE GetInternalInstance() = 0;
};
class CFILE
{
public:
II2* CRtlRefCountedObjectBase;
DWORD a01;
IRtlFile* CSystemObject;
UINT_PTR a03;
UINT_PTR a04;
UINT_PTR a05;
UINT_PTR a06;
UINT_PTR a07;
UINT_PTR a08;
LUNICODE_STRING Name;
UINT_PTR a10;
UINT_PTR a11;
UINT_PTR a12;
CFILE();
~CFILE();
};
调用方法
当然还是先找一个最简单的函数 GetName。
GetName 有三个参数:
第一个参数用于记录的,可以忽略;
第二个参数为数值,1,表示短文件名,2,表示长文件名;
第三个参数为输出的字符串。
CFILE *File= new CFILE();
LUNICODE_STRING FileName;
RtlInitLUnicodeString(&FileName, L"C:\\Windows\\offline");
File->Name = FileName;
PLUNICODE_STRING lusName = new LUNICODE_STRING();
((IRtlFile*)&File->CSystemObject)->GetName(NULL, 1, lusName);
LPWSTR pszName = L"";
ConvertLUnicodeStringToNullTerminatedString(lusName, &pszName);
printf("%ws\n", pszName);