解读 CopyFileContents

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

解读 CopyFileContents

 

 

 

//----- (100F1216)--------------------------------------------------------
int __fastcall CopyFileContents(inta1, int a2, int a3, int a4)
{

  v38 =C00000E5;
  v4 =a3;
  v5 =a2;
  if (a3 )
  {
    if (a4 )
    {
      v29 =0;
      v30 =0;
      v31 =0;
      v37 =0i64;
      v38 =0;
      if (!a2 )
      {
        Windows::Auto<Windows::Rtl::SystemImplementation::DirectFileSystemProvider*>::Allocate(&v38);
        v5 =v38;
        v4 =a3;
      }
      v8 =*(_DWORD*)v5;
      v9 =v4;
// SysQueryInformationFile

      v6 = (*(int(__thiscall **)(int, int, char *, char *,signed int, signed int))(v8+ 48))(
             v5,
             v9,
             &v35,
             &v32,
             24,
             5);
      if (v6 >= 0)
      {
        v34 =v33;
        v10 =*(_DWORD*)v5;
// SysSetInformationFile

        v6 = (*(int(__thiscall **)(int, _DWORD, int, char *, __int64 *,signed int, signed int, _DWORD))(v10 + 52))(
               v5,
               0,
               a4,
               &v35,
               (__int64*)&v34,
               8,
               20,
               0);
        if ( v6 >= 0 )
        {
          v27 =HIDWORD(v33);
          HIDWORD(v11) = v33;
          v12 =0x400000;
          if ( v33 <=0x400000 )
            v12 = v33;
          v6 =RtlAllocateLBlob(v12, (int)&v29);
          if ( v6 >=0 )
          {
            LODWORD(v11) = v27;
            if ( !__PAIR__(HIDWORD(v11), v27) )
            {
LABEL_22:
              Windows::Auto<Windows::Rtl::SystemImplementation::DirectFileSystemProvider*>::~Auto<Windows::Rtl::SystemImplementation::DirectFileSystemProvider*>(&v38);
              Windows::Rtl::AutoBlob<Windows::Auto<_LBLOB>>::Close((int)&v29);
              return 0;
            }
            HIDWORD(v13) = 0;
            while ( 1 )
            {
              LODWORD(v13) = (unsignedint)v11 >HIDWORD(v13)
                          || (unsignedint)v11 >=HIDWORD(v13)&& HIDWORD(v11) >= v30 ?v30 : HIDWORD(v11);
              v14 = *(_DWORD *)v5;
              v15 = HIDWORD(v13);
              v16 = HIDWORD(v13);
              v17 = v13;
              v18 = v31;
              v19 = HIDWORD(v13);
              v20 =HIDWORD(v13);
              v21 = HIDWORD(v13);
              v22 = HIDWORD(v13);
// SysReadFile

              v6 = (*(int(__thiscall **)(int, int, int, int, int,int, char *, constchar *, int, __int64*, int, int))(v14 + 40))(
                     v5,
                     v22,
                     a3,
                     v21,
                     v20,
                     v19,
                     &v35,
                     v18,
                     v17,
                     &v37,
                     v16,
                     v15);
              if ( v6 <0 )
                break;
              v23 = *(_DWORD *)v5;
              v24 = v36;
              v25 = v31;
// SysWriteFile

              v6 = (*(int(__thiscall **)(int, _DWORD, int, _DWORD, _DWORD,_DWORD, char *, const char*, unsigned int, __int64*, _DWORD, _DWORD))(v23 + 44))(
                     v5,
                     0,
                     a4,
                     0,
                     0,
                     0,
                     &v35,
                     v25,
                     v24,
                     &v37,
                     0,
                     0);
              if ( v6 <0 )
                break;
              LODWORD(v11) = (__PAIR__(v27, HIDWORD(v11)) - v36) >>32;
              HIDWORD(v11) -= v36;
              v13 = HIDWORD(v11);
              v27 = v11;
              v37 += v36;
              if ( !v11 )
                goto LABEL_22;
            }
          }
        }
      }
      Windows::Auto<Windows::Rtl::SystemImplementation::DirectFileSystemProvider*>::~Auto<Windows::Rtl::SystemImplementation::DirectFileSystemProvider*>(&v38);
      Windows::Rtl::AutoBlob<Windows::Auto<_LBLOB>>::Close((int)&v29);
    }
    else
    {
     Windows::ErrorHandling::Rtl::CBaseFrame<Windows::ErrorHandling::Rtl::CVoidRaiseFrame>::SetInvalidParameter_NullPointer(&v38);
      v28 ="base\\wcp\\sil\\merged\\ntu\\ntsystem.cpp";
      v29 =(int)"Windows::Rtl::SystemImplementation::CopyFileContents";
      v30 =4806;
      v31 ="Not-null check failed: Target";
     Windows::ErrorHandling::Rtl::CBaseFrame<Windows::ErrorHandling::Rtl::CVoidRaiseFrame>::ReportErrorOrigination(
        v7,
        (int)&v28);
      v6 =v38;
    }
  }
  else
  {
    v6 =0;
  }
  return v6;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值