类 IRtlFile 函数的调用

179 篇文章 0 订阅
86 篇文章 0 订阅

类 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;  // 标志位,初始化时为 1
    IRtlFile* CSystemObject;
    UINT_PTR a03; // IRtlObjectProvider 接口 
    UINT_PTR a04;
    UINT_PTR a05;  // Handle
    UINT_PTR a06;
    UINT_PTR a07;
    UINT_PTR a08;  // IRtlFileSystemProvider 接口
    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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值