Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- char __fastcall MmCreateProcessAddressSpace(__int64 a1, __int64 a2, __int64 a3, char a4)
- {
- char v4; // r13
- int *v5; // rdi
- signed __int64 v6; // r15
- _QWORD *v7; // rax
- __int64 v8; // r12
- unsigned __int64 v9; // rbx
- __int64 v10; // rdx
- __int64 v11; // rdx
- __int64 v12; // r13
- signed __int64 v13; // r13
- __int16 v14; // r12
- int v15; // er14
- _WORD *v16; // rsi
- unsigned int v17; // ebx
- __int64 v18; // rax
- __int64 v19; // rax
- _WORD *v20; // r14
- unsigned int v21; // er8
- __int64 *v22; // ST18_8
- __int64 *v23; // r13
- __int64 v24; // rdx
- signed __int64 v25; // r11
- int v26; // er8
- int v27; // er9
- unsigned __int64 v28; // rdi
- unsigned __int64 v29; // rsi
- unsigned int v30; // er15
- unsigned __int64 v31; // rdx
- unsigned __int64 v32; // r12
- unsigned __int64 *v33; // r10
- _QWORD *v34; // r8
- unsigned __int64 v35; // rcx
- __int64 v36; // rbx
- unsigned __int64 v37; // rbx
- __int64 v38; // r9
- __int64 *v39; // r8
- __int64 v40; // rax
- __int64 v41; // r8
- __int64 v42; // rdx
- __int64 v43; // rbx
- unsigned __int64 v44; // rdx
- unsigned __int64 v46; // ST10_8
- __int64 v47; // [rsp+8h] [rbp-61h]
- __int64 v48; // [rsp+8h] [rbp-61h]
- unsigned __int64 v49; // [rsp+10h] [rbp-59h]
- unsigned __int64 v50; // [rsp+10h] [rbp-59h]
- __int64 v51; // [rsp+18h] [rbp-51h]
- unsigned __int64 v52; // [rsp+18h] [rbp-51h]
- _WORD *v53; // [rsp+20h] [rbp-49h]
- unsigned __int64 *v54; // [rsp+20h] [rbp-49h]
- _KPROCESS *v55; // [rsp+28h] [rbp-41h]
- __int64 v56; // [rsp+30h] [rbp-39h]
- _QWORD *v57; // [rsp+38h] [rbp-31h]
- _QWORD *v58; // [rsp+40h] [rbp-29h]
- unsigned __int64 v59; // [rsp+48h] [rbp-21h]
- __int64 v60; // [rsp+50h] [rbp-19h]
- _WORD *v61; // [rsp+58h] [rbp-11h]
- __int16 v62; // [rsp+60h] [rbp-9h]
- unsigned __int16 v63; // [rsp+62h] [rbp-7h]
- unsigned __int64 v64; // [rsp+68h] [rbp-1h]
- unsigned __int64 v65; // [rsp+70h] [rbp+7h]
- _WORD *retaddr; // [rsp+E8h] [rbp+7Fh]
- v4 = a4;
- v56 = a3;
- v53 = retaddr;
- v5 = (int *)MiJoinPartition(a1, retaddr);
- v6 = 5i64;
- if ( (unsigned int)MiChargeCommit(v5, 5i64) )
- {
- v55 = KeGetCurrentThread()->ApcState.Process;
- retaddr[640] = RtlRandomEx(&dword_140321A60);
- v7 = retaddr + 956;
- v7[1] = v7;
- *v7 = v7;
- *((_QWORD *)retaddr + 238) = 0i64;
- v8 = v56;
- if ( v56 != PsGetDefaultWsMaximum() )
- {
- LODWORD(v53) = 1;
- MiCheckWsLimits((char)retaddr);
- v8 = v56;
- }
- v9 = v49;
- if ( (unsigned int)MiChargeWsles(retaddr + 640, v49, 1i64) )
- {
- *((_QWORD *)retaddr + 178) = v8;
- *((_QWORD *)retaddr + 173) = v9;
- if ( v4 & 1 )
- *((_BYTE *)retaddr + 1464) |= 0x40u;
- if ( (signed int)PsChargeProcessQuota(retaddr, v10, v9) >= 0 )
- {
- if ( (unsigned int)MiChargeResident(v5, v9, 0i64) )
- {
- v12 = MiReservePtes(&qword_140322CB0, 4i64);
- if ( v12 )
- {
- if ( v5 == &MiSystemPartition )
- {
- _InterlockedExchangeAdd64(&qword_140322868, v9);
- v9 = v50;
- }
- if ( (unsigned int)MiJoinSession(&v60) )
- {
- _InterlockedExchangeAdd64(&qword_140322D50, 5ui64);
- v13 = 0i64;
- MiInitializePageColorBase(&v55[1].IdealNode[12], 0i64, &v61);
- v14 = v62;
- v15 = v63;
- v16 = v61;
- do
- {
- v17 = v15 | (unsigned __int16)(v14 & ++*v16);
- while ( 1 )
- {
- v18 = MiGetPage(v5, v17, 194i64);
- if ( v18 != -1 )
- break;
- MiWaitForFreePage(v5);
- }
- *(_QWORD *)(48 * v18 - 6047313952768i64) = v13;
- v13 = 48 * v18 - 6047313952768i64;
- --v6;
- }
- while ( v6 );
- v57 = (_QWORD *)(48 * v18 - 6047313952768i64);
- v19 = MiGetPteAddress(qword_1403233D0 + 276840816);
- v20 = v53;
- v21 = 0;
- v23 = v22;
- do
- {
- *(&v64 + 4 - v21) = v19;
- v19 = MiGetPteAddress(v19);
- v21 = v27 + v26;
- }
- while ( v21 <= 4 );
- v28 = 0i64;
- v29 = 0i64;
- v30 = 0;
- v31 = (unsigned __int128)((v24 - v25) * (signed __int128)3074457345618258603i64) >> 64;
- v32 = (v31 >> 63) + ((signed __int64)v31 >> 3);
- v33 = &v64;
- v54 = &v64;
- do
- {
- v34 = v57;
- v58 = v57;
- v57 = (_QWORD *)*v57;
- *v58 = 0i64;
- v35 = (signed __int64)((unsigned __int128)((signed __int64)&v34[v25 / 0xFFFFFFFFFFFFFFF8ui64]
- * (signed __int128)3074457345618258603i64) >> 64) >> 3;
- v59 = *v33;
- v36 = MiMakeValidKernelPte((v35 >> 63) + v35, 6i64);
- v37 = v47 & (v36 & 0xFFFFFFFFFFFFFEFFui64 | 0x42);
- if ( !v30 )
- {
- *v58 = v20;
- v37 = v47 & (v37 | 0x8000000000000000ui64);
- v28 = v37;
- }
- MiInitializePfnForOtherProcess(v51, v59, v32, 0i64);
- MiMarkPageActive(v58);
- v38 = qword_1403A7350;
- v39 = v23;
- if ( v30 == 1 )
- {
- v29 = v37;
- }
- else
- {
- v40 = MiMakeValidKernelPte(v32, 4i64);
- v38 = v48;
- *v39 = v40 | 0x42;
- if ( v30 == 4 )
- v37 = ~v48 & (v37 | 0x8000000000000000ui64);
- }
- ++v30;
- v33 = v54 + 1;
- v41 = (_QWORD)v39 << 25 >> 16;
- ++v54;
- v25 = -6047313952768i64;
- *(_QWORD *)(v41 + 8 * ((v59 >> 3) & 0x1FF)) = v37;
- v32 = v52;
- }
- while ( v30 <= 4 );
- v42 = v60;
- *((_QWORD *)v20 + 108) = v52;
- if ( v42 )
- {
- *((_QWORD *)v20 + 128) = v42;
- _InterlockedOr((volatile signed __int32 *)v20 + 193, 0x10000u);
- v42 = v60;
- }
- MiInsertNewProcess(v20, v42, v41, v38);
- v43 = (_QWORD)v23 << 25 >> 16;
- MiCopyTopLevelMappings(v20, v43);
- v44 = (v64 >> 3) & 0x1FF;
- *(_QWORD *)(v43 + 8 * ((v65 >> 3) & 0x1FF)) = v29;
- *(_QWORD *)(v43 + 8 * v44) = v28;
- *((_QWORD *)v20 + 5) = v28 & 0xFFFFFFFFF000i64;
- MiSyncSystemPdes(v20);
- MiReleasePtes(&qword_140322CB0, v23, 4i64);
- return 1;
- }
- MiReleasePtes(&qword_140322CB0, v12, 4i64);
- }
- if ( v5 == &MiSystemPartition )
- {
- MiReturnResidentAvailable(v9);
- _InterlockedExchangeAdd64(&qword_140322870, v9);
- v9 = v46;
- }
- else
- {
- MiReturnPartitionResidentAvailable(v5, v9);
- }
- }
- PsReturnProcessQuota(retaddr, v11, v9);
- }
- MiChargeWsles(retaddr + 640, -(signed __int64)v9, 1i64);
- }
- MiReturnCommit(v5, 5i64);
- }
- if ( v5 != &MiSystemPartition )
- MiDereferencePartition(v5);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement