
		push	eax
		call	_MmProbeAndLockPages@12	; MmProbeAndLockPages(x,x,x)
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		push	40000010h
		push	edi
		push	edi
		push	1
		push	edi
		push	dword ptr [ebx+20h]
		call	MmMapLockedPagesSpecifyCache
		mov	ecx, eax
		mov	[ebp+var_24], ecx
		test	ecx, ecx
		jnz	short loc_A0F8B3
		push	edi
		push	offset _ExpProfileStateMutex
		call	_KeReleaseMutex@8 ; KeReleaseMutex(x,x)
		push	[ebp+arg_0]
		call	_MmUnlockPages@4 ; MmUnlockPages(x)
		push	edi
		mov	esi, [ebp+var_20]
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	esi, 0C000009Ah

loc_A0F8A5:				; CODE XREF: NtStartProfile(x)+AEj
		mov	ecx, ebx
		call	ObfDereferenceObject
		mov	eax, esi
		jmp	loc_A0F934
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0F8B3:				; CODE XREF: NtStartProfile(x)+131j
		lea	eax, [ebx+2Ch]
		push	eax
		push	dword ptr [ebx+28h]
		push	dword ptr [ebx+24h]
		push	dword ptr [ebx+14h]
		push	dword ptr [ebx+8]
		push	dword ptr [ebx+4]
		push	ecx
		mov	edx, [ebx]
		mov	ecx, [ebp+var_20]
		call	_KeInitializeProfile@36	; KeInitializeProfile(x,x,x,x,x,x,x,x,x)
		mov	ecx, [ebp+var_20]
		call	_KeStartProfile@4 ; KeStartProfile(x)
		mov	eax, [ebp+var_24]
		mov	[ebx+1Ch], eax
		inc	_ExpCurrentProfileUsage
		push	edi
		push	offset _ExpProfileStateMutex
		call	_KeReleaseMutex@8 ; KeReleaseMutex(x,x)
		mov	ecx, ebx
		call	ObfDereferenceObject
		xor	eax, eax
		jmp	short loc_A0F934
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0F8FB:				; DATA XREF: .text:006AA9DCo
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_28], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0F909:				; DATA XREF: .text:006AA9E0o
		mov	esp, [ebp+ms_exc.old_esp]
		xor	edi, edi
		push	edi
		push	offset _ExpProfileStateMutex
		call	_KeReleaseMutex@8 ; KeReleaseMutex(x,x)
		push	edi
		push	[ebp+var_20]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	ecx, [ebp+var_1C]
		call	ObfDereferenceObject
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	eax, [ebp+var_28]

loc_A0F934:				; CODE XREF: NtStartProfile(x)+3Aj
					; NtStartProfile(x)+15Ej ...
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
_NtStartProfile@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall NtStopProfile(x)
_NtStopProfile@4 proc near		; DATA XREF: .text:00580C30o

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 0Ch
		mov	eax, large fs:124h
		lea	ecx, [esp+0Ch+var_C]
		push	ebx
		push	esi
		push	edi
		mov	al, [eax+15Ah]
		xor	ebx, ebx
		push	ebx
		push	ecx
		mov	byte ptr [esp+20h+var_4], al
		push	[esp+20h+var_4]
		mov	eax, ds:_ExProfileObjectType
		push	eax
		push	1
		push	[ebp+arg_0]
		mov	[esp+30h+var_8], ebx
		mov	[esp+30h+var_C], ebx
		call	_ObReferenceObjectByHandle@24 ;	ObReferenceObjectByHandle(x,x,x,x,x,x)
		test	eax, eax
		js	short loc_A0FA02
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		mov	esi, offset _ExpProfileStateMutex
		push	esi
		call	KeWaitForSingleObject
		mov	edi, [esp+18h+var_C]
		cmp	[edi+1Ch], ebx
		jnz	short loc_A0F9B4
		push	ebx
		push	esi
		call	_KeReleaseMutex@8 ; KeReleaseMutex(x,x)
		mov	[esp+18h+var_8], 0C00000B7h
		jmp	short loc_A0F9F7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0F9B4:				; CODE XREF: NtStopProfile(x)+5Bj
		mov	ecx, [edi+18h]
		call	_KeStopProfile@4 ; KeStopProfile(x)
		mov	esi, [edi+1Ch]
		dec	_ExpCurrentProfileUsage
		mov	[edi+1Ch], ebx
		mov	ebx, [esp+18h+var_C]
		mov	edi, [edi+20h]
		push	0
		push	offset _ExpProfileStateMutex
		mov	ebx, [ebx+18h]
		call	_KeReleaseMutex@8 ; KeReleaseMutex(x,x)
		push	edi
		push	esi
		call	MmUnmapLockedPages
		push	edi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)
		push	0
		push	ebx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	edi, [esp+1Ch+var_10]

loc_A0F9F7:				; CODE XREF: NtStopProfile(x)+6Cj
		mov	ecx, edi
		call	ObfDereferenceObject
		mov	eax, [esp+1Ch+var_C]

loc_A0FA02:				; CODE XREF: NtStopProfile(x)+43j
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
_NtStopProfile@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall CMFAllocFn(x, x)
_CMFAllocFn@8	proc near		; CODE XREF: XpressDecodeCreate(x,x)+4p

arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	636D6650h
		push	[ebp+arg_4]
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		pop	ebp
		retn	8
_CMFAllocFn@8	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall CMFCheckAccess(x, x, x)
_CMFCheckAccess@12 proc	near		; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+143p
					; NtMapCMFModule(x,x,x,x,x,x)+60Dp

var_168		= dword	ptr -168h
var_164		= dword	ptr -164h
var_160		= dword	ptr -160h
var_15C		= dword	ptr -15Ch
var_158		= dword	ptr -158h
var_151		= byte ptr -151h
var_150		= dword	ptr -150h
var_8C		= dword	ptr -8Ch
var_70		= dword	ptr -70h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 168h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		push	esi
		push	74h		; size_t
		xor	ebx, ebx
		mov	[ebp+var_164], edx
		lea	eax, [ebp+var_8C]
		mov	esi, ecx
		push	ebx		; int
		push	eax		; void *
		call	_memset
		push	0C4h		; size_t
		lea	eax, [ebp+var_150]
		push	ebx		; int
		push	eax		; void *
		call	_memset
		add	esp, 18h
		mov	[ebp+var_158], ebx
		test	esi, esi
		jnz	short loc_A0FA7C
		mov	esi, 0C000000Dh
		jmp	loc_A0FC32
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0FA7C:				; CODE XREF: CMFCheckAccess(x,x,x)+4Dj
		lea	eax, [esi-18h]
		shr	eax, 8
		movzx	edx, al
		movzx	eax, byte ptr [esi-0Ch]
		xor	edx, eax
		movzx	eax, byte ptr ds:_ObHeaderCookie
		xor	edx, eax
		lea	eax, [ebp+var_164]
		push	edi
		mov	edi, ds:_ObTypeIndexTable[edx*4]
		add	edi, 34h
		push	edi
		push	eax
		call	_RtlMapGenericMask@8 ; RtlMapGenericMask(x,x)
		cmp	_CMFSecurityDescriptor,	ebx
		jnz	short loc_A0FAFB
		mov	edx, edi
		mov	[ebp+var_15C], ebx
		lea	ecx, [ebp+var_15C]
		call	_CMFCreateSecurityDescriptor@8 ; CMFCreateSecurityDescriptor(x,x)
		mov	esi, eax
		mov	eax, 0C0000000h
		mov	ecx, esi
		and	ecx, eax
		cmp	ecx, eax
		jz	loc_A0FC31
		mov	ecx, [ebp+var_15C]
		mov	edx, offset _CMFSecurityDescriptor
		xor	eax, eax
		lock cmpxchg [edx], ecx
		test	eax, eax
		jz	short loc_A0FAFB
		push	ebx
		push	[ebp+var_15C]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A0FAFB:				; CODE XREF: CMFCheckAccess(x,x,x)+8Fj
					; CMFCheckAccess(x,x,x)+CAj
		mov	eax, large fs:124h
		lea	edx, [ebp+var_150]
		mov	ecx, large fs:124h
		mov	ebx, [ebp+var_164]
		push	edi		; int
		mov	eax, [eax+80h]
		push	ebx		; int
		push	edx		; void *
		lea	edx, [ebp+var_8C]
		push	edx		; void *
		push	eax		; int
		push	ecx		; int
		call	_SeCreateAccessStateEx@24 ; SeCreateAccessStateEx(x,x,x,x,x,x)
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A0FC31
		lea	eax, [ebp+var_70]
		push	eax
		call	_SeLockSubjectContext@4	; SeLockSubjectContext(x)
		push	[ebp+arg_0]
		lea	eax, [ebp+var_70]
		mov	[ebp+var_18], 1
		push	eax
		xor	esi, esi
		mov	[ebp+var_10], 12h
		lea	eax, [ebp+var_18]
		mov	[ebp+var_14], esi
		push	eax
		mov	[ebp+var_8], esi
		mov	[ebp+var_C], esi
		call	_SePrivilegeCheck@12 ; SePrivilegeCheck(x,x,x)
		mov	[ebp+var_151], al
		mov	[ebp+var_168], esi
		mov	[ebp+var_160], esi
		test	al, al
		jnz	short loc_A0FBDD
		lea	eax, [ebp+var_168]
		push	eax
		lea	eax, [ebp+var_160]
		push	eax
		push	[ebp+arg_0]
		lea	eax, [ebp+var_158]
		push	edi
		push	eax
		push	esi
		push	ebx
		push	1
		lea	eax, [ebp+var_70]
		push	eax
		push	_CMFSecurityDescriptor
		call	_SeAccessCheck@40 ; SeAccessCheck(x,x,x,x,x,x,x,x,x,x)
		mov	[ebp+var_151], al
		cmp	[ebp+var_158], esi
		jz	short loc_A0FBE3
		push	[ebp+var_158]
		lea	eax, [ebp+var_8C]
		push	eax
		call	SeAppendPrivileges
		push	[ebp+var_158]
		call	_SeFreePrivileges@4 ; SeFreePrivileges(x)
		jmp	short loc_A0FBE3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0FBDD:				; CODE XREF: CMFCheckAccess(x,x,x)+15Fj
		mov	[ebp+var_160], ebx

loc_A0FBE3:				; CODE XREF: CMFCheckAccess(x,x,x)+199j
					; CMFCheckAccess(x,x,x)+1B8j
		lea	eax, [ebp+var_70]
		push	eax
		call	_SeUnlockSubjectContext@4 ; SeUnlockSubjectContext(x)
		mov	esi, [ebp+var_168]
		mov	ecx, 0C0000000h
		mov	eax, esi
		and	eax, ecx
		cmp	eax, ecx
		jz	short loc_A0FC1D
		cmp	[ebp+var_151], 0
		jz	short loc_A0FC18
		mov	eax, [ebp+var_160]
		not	eax
		test	eax, ebx
		jnz	short loc_A0FC18
		xor	esi, esi
		jmp	short loc_A0FC1D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0FC18:				; CODE XREF: CMFCheckAccess(x,x,x)+1E3j
					; CMFCheckAccess(x,x,x)+1EFj
		mov	esi, 0C0000022h

loc_A0FC1D:				; CODE XREF: CMFCheckAccess(x,x,x)+1DAj
					; CMFCheckAccess(x,x,x)+1F3j
		lea	ecx, [ebp+var_8C]
		call	SepDeleteAccessState
		lea	eax, [ebp+var_70]
		push	eax
		call	SeReleaseSubjectContext

loc_A0FC31:				; CODE XREF: CMFCheckAccess(x,x,x)+B1j
					; CMFCheckAccess(x,x,x)+113j
		pop	edi

loc_A0FC32:				; CODE XREF: CMFCheckAccess(x,x,x)+54j
		mov	ecx, [ebp+var_4]
		mov	eax, esi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	4
_CMFCheckAccess@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall CMFCreateSecurityDescriptor(x, x)
_CMFCreateSecurityDescriptor@8 proc near ; CODE	XREF: CMFCheckAccess(x,x,x)+9Fp
					; CMFSystemThreadRoutine(x)+334p

var_44		= dword	ptr -44h
var_30		= dword	ptr -30h
var_2C		= word ptr -2Ch
var_28		= dword	ptr -28h
var_24		= word ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= word ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 44h
		push	ebx
		xor	eax, eax
		mov	[ebp+var_2C], 500h
		push	esi
		push	edi
		lea	edi, [ebp+var_44]
		mov	[ebp+var_18], 100h
		stosd
		mov	ebx, edx
		mov	edx, ecx
		mov	[ebp+var_24], 0F00h
		xor	ecx, ecx
		mov	[ebp+var_4], edx
		and	[ebp+var_C], ecx
		stosd
		mov	[ebp+var_30], ecx
		mov	[ebp+var_1C], ecx
		mov	[ebp+var_28], ecx
		stosd
		mov	[ebp+var_14], ecx
		mov	[ebp+var_10], ecx
		stosd
		stosd
		xor	edi, edi
		test	edx, edx
		jnz	short loc_A0FC96
		mov	esi, 0C000000Dh
		jmp	loc_A10121
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0FC96:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+46j
		and	[edx], ecx
		lea	eax, [ebp+var_44]
		push	1
		push	eax
		call	_RtlCreateSecurityDescriptor@8 ; RtlCreateSecurityDescriptor(x,x)
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A10109
		push	636D6650h
		push	0Ch
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	[ebp+var_20], eax
		test	eax, eax
		jnz	short loc_A0FCD6
		mov	ebx, [ebp+var_4]
		mov	esi, 0C0000017h
		jmp	loc_A10110
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0FCD6:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+83j
		push	1
		lea	ecx, [ebp+var_1C]
		push	ecx
		push	eax
		call	_RtlInitializeSid@12 ; RtlInitializeSid(x,x,x)
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	short loc_A0FD1F
		mov	esi, [ebp+var_20]
		push	0
		push	esi
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	636D6650h
		push	20h
		push	1
		and	[eax], edi
		movzx	eax, byte ptr [esi+1]
		mov	[ebp+var_1C], eax
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		mov	[ebp+var_C], esi
		test	esi, esi
		jnz	short loc_A0FD6E

loc_A0FD1A:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+1A7j
					; CMFCreateSecurityDescriptor(x,x)+205j ...
		mov	esi, 0C0000017h

loc_A0FD1F:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+A9j
					; CMFCreateSecurityDescriptor(x,x)+1C4j ...
		mov	ebx, [ebp+var_4]

loc_A0FD22:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+429j
		push	0
		push	[ebp+var_20]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	eax, [ebp+var_C]
		test	eax, eax
		jz	short loc_A0FD3B
		push	0
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A0FD3B:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+EDj
		mov	eax, [ebp+var_10]
		test	eax, eax
		jz	short loc_A0FD4A
		push	0
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A0FD4A:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+FCj
		test	edi, edi
		jz	short loc_A0FD56
		push	0
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A0FD56:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+108j
		mov	eax, [ebp+var_14]
		test	eax, eax
		jz	loc_A1010C
		push	0
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		jmp	loc_A1010C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0FD6E:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+D4j
		push	6
		lea	eax, [ebp+var_30]
		push	eax
		push	esi
		call	_RtlInitializeSid@12 ; RtlInitializeSid(x,x,x)
		push	0
		push	esi
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	1
		push	esi
		mov	dword ptr [eax], 50h
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	2
		push	esi
		mov	dword ptr [eax], 38FB89B5h
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	3
		push	esi
		mov	dword ptr [eax], 0CBC28419h
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	4
		push	esi
		mov	dword ptr [eax], 6D236C5Ch
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	5
		push	esi
		mov	dword ptr [eax], 6E770057h
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	636D6650h
		push	10h
		push	1
		mov	dword ptr [eax], 876402C0h
		movzx	eax, byte ptr [esi+1]
		add	eax, [ebp+var_1C]
		mov	[ebp+var_1C], eax
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	[ebp+var_10], eax
		test	eax, eax
		jz	loc_A0FD1A
		push	2
		lea	ecx, [ebp+var_28]
		push	ecx
		push	eax
		call	_RtlInitializeSid@12 ; RtlInitializeSid(x,x,x)
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A0FD1F
		mov	esi, [ebp+var_10]
		push	0
		push	esi
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		xor	edi, edi
		inc	edi
		push	edi
		push	esi
		mov	dword ptr [eax], 2
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	636D6650h
		push	10h
		push	edi
		mov	[eax], edi
		movzx	eax, byte ptr [esi+1]
		add	eax, [ebp+var_1C]
		mov	[ebp+var_8], eax
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		mov	[ebp+var_1C], edi
		test	edi, edi
		jz	loc_A0FD1A
		push	2
		lea	eax, [ebp+var_28]
		push	eax
		push	edi
		call	_RtlInitializeSid@12 ; RtlInitializeSid(x,x,x)
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A0FD1F
		push	0
		push	edi
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	2
		pop	esi
		push	1
		push	edi
		mov	[eax], esi
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	636D6650h
		push	10h
		push	1
		mov	[eax], esi
		movzx	eax, byte ptr [edi+1]
		add	eax, [ebp+var_8]
		mov	[ebp+var_8], eax
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	[ebp+var_14], eax
		test	eax, eax
		jz	loc_A0FD1A
		push	esi
		lea	ecx, [ebp+var_30]
		push	ecx
		push	eax
		call	_RtlInitializeSid@12 ; RtlInitializeSid(x,x,x)
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A0FD1F
		mov	esi, [ebp+var_14]
		push	0
		push	esi
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	1
		push	esi
		mov	dword ptr [eax], 20h
		call	_RtlSubAuthoritySid@8 ;	RtlSubAuthoritySid(x,x)
		push	636D6650h
		mov	dword ptr [eax], 220h
		movzx	eax, byte ptr [esi+1]
		add	eax, [ebp+var_8]
		lea	esi, ds:6Ch[eax*4]
		push	esi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A0FF0F
		mov	edi, [ebp+var_1C]
		mov	esi, 0C0000017h
		jmp	loc_A0FD1F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A0FF0F:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+2BCj
		push	2		; int
		push	esi		; size_t
		push	edi		; void *
		call	_RtlCreateAcl@12 ; RtlCreateAcl(x,x,x)
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A1005F
		mov	eax, 10000000h
		mov	[ebp+var_8], eax
		test	ebx, ebx
		jz	short loc_A0FF42
		push	ebx
		lea	eax, [ebp+var_8]
		push	eax
		call	_RtlMapGenericMask@8 ; RtlMapGenericMask(x,x)
		mov	eax, [ebp+var_8]

loc_A0FF42:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+2EFj
		push	0
		push	[ebp+var_C]
		mov	ecx, edi
		push	eax
		push	3
		push	2
		pop	edx
		call	RtlpAddKnownAce
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A1005F
		mov	eax, 10000000h
		mov	[ebp+var_8], eax
		test	ebx, ebx
		jz	short loc_A0FF7E
		push	ebx
		lea	eax, [ebp+var_8]
		push	eax
		call	_RtlMapGenericMask@8 ; RtlMapGenericMask(x,x)
		mov	eax, [ebp+var_8]

loc_A0FF7E:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+32Bj
		mov	ecx, [ebp+var_14]
		push	0
		push	ecx
		push	eax
		push	3
		push	2
		pop	edx
		mov	ecx, edi
		call	RtlpAddKnownAce
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A1005F
		mov	eax, 80000000h
		mov	[ebp+var_8], eax
		test	ebx, ebx
		jz	short loc_A0FFBB
		push	ebx
		lea	eax, [ebp+var_8]
		push	eax
		call	_RtlMapGenericMask@8 ; RtlMapGenericMask(x,x)
		mov	eax, [ebp+var_8]

loc_A0FFBB:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+368j
		push	0
		push	[ebp+var_20]
		mov	ecx, edi
		push	eax
		push	3
		push	2
		pop	edx
		call	RtlpAddKnownAce
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A1005F
		mov	eax, 80000000h
		mov	[ebp+var_8], eax
		test	ebx, ebx
		jz	short loc_A0FFF7
		push	ebx
		lea	eax, [ebp+var_8]
		push	eax
		call	_RtlMapGenericMask@8 ; RtlMapGenericMask(x,x)
		mov	eax, [ebp+var_8]

loc_A0FFF7:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+3A4j
		mov	ecx, [ebp+var_10]
		push	0
		push	ecx
		push	eax
		push	3
		push	2
		pop	edx
		mov	ecx, edi
		call	RtlpAddKnownAce
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	short loc_A1005F
		mov	eax, 80000000h
		mov	[ebp+var_8], eax
		test	ebx, ebx
		jz	short loc_A10030
		push	ebx
		lea	eax, [ebp+var_8]
		push	eax
		call	_RtlMapGenericMask@8 ; RtlMapGenericMask(x,x)
		mov	eax, [ebp+var_8]

loc_A10030:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+3DDj
		xor	ebx, ebx
		mov	ecx, edi
		push	ebx
		push	[ebp+var_1C]
		push	eax
		push	3
		push	2
		pop	edx
		call	RtlpAddKnownAce
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	short loc_A1005F
		push	edi
		call	RtlValidAcl
		test	al, al
		jnz	short loc_A10072
		mov	esi, 0C0000077h

loc_A1005F:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+2DFj
					; CMFCreateSecurityDescriptor(x,x)+31Bj ...
		mov	ebx, [ebp+var_4]

loc_A10062:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+4ABj
					; CMFCreateSecurityDescriptor(x,x)+4C0j
		push	0
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	edi, [ebp+var_1C]
		jmp	loc_A0FD22
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10072:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+414j
		push	ebx
		push	edi
		push	1
		lea	eax, [ebp+var_44]
		push	eax
		call	RtlSetDaclSecurityDescriptor
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	short loc_A1005F
		push	ebx
		push	[ebp+var_C]
		lea	eax, [ebp+var_44]
		push	eax
		call	_RtlSetOwnerSecurityDescriptor@12 ; RtlSetOwnerSecurityDescriptor(x,x,x)
		mov	ecx, 0C0000000h
		mov	esi, eax
		and	eax, ecx
		cmp	eax, ecx
		jz	short loc_A1005F
		lea	eax, [ebp+var_44]
		push	eax
		call	_RtlValidSecurityDescriptor@4 ;	RtlValidSecurityDescriptor(x)
		test	al, al
		jnz	short loc_A100BA
		mov	esi, 0C0000079h
		jmp	short loc_A1005F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A100BA:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+46Dj
		lea	eax, [ebp+var_8]
		mov	[ebp+var_8], ebx
		push	eax
		push	ebx
		lea	eax, [ebp+var_44]
		push	eax
		call	_RtlAbsoluteToSelfRelativeSD@12	; RtlAbsoluteToSelfRelativeSD(x,x,x)
		mov	esi, eax
		cmp	[ebp+var_8], ebx
		jz	short loc_A1005F
		push	636D6650h
		push	[ebp+var_8]
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	ebx, [ebp+var_4]
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A100F4
		mov	esi, 0C0000017h
		jmp	loc_A10062
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A100F4:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+4A4j
		lea	ecx, [ebp+var_8]
		push	ecx
		push	eax
		lea	eax, [ebp+var_44]
		push	eax
		call	_RtlAbsoluteToSelfRelativeSD@12	; RtlAbsoluteToSelfRelativeSD(x,x,x)
		mov	esi, eax
		jmp	loc_A10062
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10109:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+6Aj
		mov	ebx, [ebp+var_4]

loc_A1010C:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+117j
					; CMFCreateSecurityDescriptor(x,x)+125j
		test	esi, esi
		jns	short loc_A10121

loc_A10110:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+8Dj
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_A10121
		push	0
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		and	dword ptr [ebx], 0

loc_A10121:				; CODE XREF: CMFCreateSecurityDescriptor(x,x)+4Dj
					; CMFCreateSecurityDescriptor(x,x)+4CAj ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
_CMFCreateSecurityDescriptor@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall CMFFlushHitsFile(x,	x)
_CMFFlushHitsFile@8 proc near		; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+6EBp

var_278		= dword	ptr -278h
var_274		= dword	ptr -274h
var_270		= dword	ptr -270h
var_26C		= dword	ptr -26Ch
var_268		= dword	ptr -268h
var_264		= dword	ptr -264h
var_260		= dword	ptr -260h
var_25C		= dword	ptr -25Ch
var_258		= dword	ptr -258h
var_254		= dword	ptr -254h
var_250		= dword	ptr -250h
var_24C		= dword	ptr -24Ch
var_248		= dword	ptr -248h
var_244		= dword	ptr -244h
var_240		= dword	ptr -240h
var_23C		= dword	ptr -23Ch
var_238		= dword	ptr -238h
var_234		= dword	ptr -234h
var_230		= dword	ptr -230h
var_22C		= dword	ptr -22Ch
var_228		= dword	ptr -228h
var_224		= word ptr -224h
ms_exc		= CPPEH_RECORD ptr -18h

		push	268h
		push	offset dword_6AAA60
		call	__SEH_prolog4_GS
		mov	[ebp+var_230], edx
		mov	[ebp+var_234], ecx
		xor	esi, esi
		mov	[ebp+var_228], esi
		mov	[ebp+var_23C], esi
		mov	[ebp+var_238], esi
		push	6
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_254]
		rep stosd
		mov	[ebp+var_268], esi
		mov	[ebp+var_264], esi
		mov	[ebp+var_22C], esi
		mov	[ebp+var_278], esi
		mov	[ebp+var_274], esi
		mov	ebx, esi
		mov	eax, [ebp+var_234]
		test	eax, eax
		jnz	short loc_A10198
		mov	eax, 0C000000Dh
		jmp	loc_A10400
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10198:				; CODE XREF: CMFFlushHitsFile(x,x)+64j
		test	_CMFFlagsCache,	8
		jnz	short loc_A101E0
		mov	[ebp+var_25C], eax
		mov	[ebp+var_258], edx
		mov	eax, large fs:124h
		mov	ecx, [eax+80h]
		lea	eax, [ebp+var_23C]
		push	eax
		lea	eax, [ebp+var_258]
		push	eax
		lea	edx, [ebp+var_25C]
		call	MmFlushVirtualMemory
		cmp	eax, 0C0000088h
		jnz	loc_A10400

loc_A101E0:				; CODE XREF: CMFFlushHitsFile(x,x)+7Aj
		push	_CMFCacheIndex
		push	offset ??_C@_1CK@DHBGEEEI@?$AA?2?$AAS?$AAy?$AAs?$AAt?$AAe?$AAm?$AAR?$AAo?$AAo?$AAt?$AA?2?$AAR?$AAe?$AAs@NNGAKEGL@ ; "\\SystemRoot\\Rescache"
		push	offset ??_C@_1CO@FCIFCGHL@?$AA?$CF?$AAs?$AA?2?$AAr?$AAc?$AA?$CF?$AA0?$AA4?$AAu?$AA?2?$AAr?$AAe?$AAs?$AAc?$AAa@NNGAKEGL@	; wchar_t *
		push	104h		; int
		lea	eax, [ebp+var_224]
		push	eax		; wchar_t *
		call	RtlStringCchPrintfW
		add	esp, 14h
		mov	edi, eax
		test	edi, edi
		js	loc_A103CB
		lea	eax, [ebp+var_224]
		push	eax
		lea	eax, [ebp+var_268]
		push	eax
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		mov	[ebp+var_254], 18h
		mov	[ebp+var_250], esi
		mov	[ebp+var_248], 240h
		lea	eax, [ebp+var_268]
		mov	[ebp+var_24C], eax
		mov	[ebp+var_244], esi
		mov	[ebp+var_240], esi
		push	esi
		push	7
		lea	eax, [ebp+var_23C]
		push	eax
		lea	eax, [ebp+var_254]
		push	eax
		push	0C0000000h
		lea	eax, [ebp+var_228]
		push	eax
		call	_ZwOpenFile@24	; ZwOpenFile(x,x,x,x,x,x)
		mov	edi, eax
		mov	ecx, 0C0000000h
		and	eax, ecx
		cmp	eax, ecx
		jnz	short loc_A1028D
		mov	[ebp+var_228], esi
		jmp	loc_A103CB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1028D:				; CODE XREF: CMFFlushHitsFile(x,x)+158j
		mov	[ebp+var_254], 18h
		mov	[ebp+var_250], esi
		mov	[ebp+var_248], 200h
		mov	[ebp+var_24C], esi
		mov	[ebp+var_244], esi
		mov	[ebp+var_240], esi
		push	esi
		push	1
		lea	eax, [ebp+var_254]
		push	eax
		push	1F0003h
		lea	eax, [ebp+var_22C]
		push	eax
		call	_ZwCreateEvent@20 ; ZwCreateEvent(x,x,x,x,x)
		mov	edi, eax
		mov	ecx, 0C0000000h
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A103CB
		mov	[ebp+var_270], esi
		mov	[ebp+var_26C], esi
		lea	edx, [ebp+var_270]
		mov	ecx, [ebp+var_228]
		call	_CMFGetFileSizeEx@8 ; CMFGetFileSizeEx(x,x)
		mov	edi, eax
		mov	ecx, 0C0000000h
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A103CB
		mov	edi, [ebp+var_270]
		mov	eax, [ebp+var_230]
		cmp	eax, edi
		jnb	short loc_A10325
		mov	edi, eax

loc_A10325:				; CODE XREF: CMFFlushHitsFile(x,x)+1F9j
		push	636D6650h
		push	edi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	ebx, eax
		mov	[ebp+var_230], ebx
		test	ebx, ebx
		jnz	short loc_A10348
		mov	edi, 0C0000017h
		jmp	loc_A103CB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10348:				; CODE XREF: CMFFlushHitsFile(x,x)+214j
		mov	[ebp+ms_exc.disabled], esi
		push	edi		; size_t
		mov	ecx, [ebp+var_234]
		push	ecx		; void *
		push	ebx		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		push	esi
		lea	eax, [ebp+var_278]
		push	eax
		push	edi
		push	ebx
		lea	eax, [ebp+var_23C]
		push	eax
		push	esi
		push	esi
		push	[ebp+var_22C]
		push	[ebp+var_228]
		call	_ZwWriteFile@36	; ZwWriteFile(x,x,x,x,x,x,x,x,x)
		mov	edi, eax
		cmp	edi, 103h
		jnz	short loc_A103CB
		push	esi
		push	esi
		push	[ebp+var_22C]
		call	_ZwWaitForSingleObject@12 ; ZwWaitForSingleObject(x,x,x)
		mov	edi, eax
		jmp	short loc_A103CB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A103A2:				; DATA XREF: .text:006AAA74o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_260], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A103B3:				; DATA XREF: .text:006AAA78o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	edi, [ebp+var_260]
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		xor	esi, esi
		mov	ebx, [ebp+var_230]

loc_A103CB:				; CODE XREF: CMFFlushHitsFile(x,x)+E0j
					; CMFFlushHitsFile(x,x)+160j ...
		test	ebx, ebx
		jz	short loc_A103D6
		push	esi
		push	ebx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A103D6:				; CODE XREF: CMFFlushHitsFile(x,x)+2A5j
		cmp	[ebp+var_22C], 0
		jz	short loc_A103EA
		push	[ebp+var_22C]
		call	_ZwClose@4	; ZwClose(x)

loc_A103EA:				; CODE XREF: CMFFlushHitsFile(x,x)+2B5j
		cmp	[ebp+var_228], 0
		jz	short loc_A103FE
		push	[ebp+var_228]
		call	_ZwClose@4	; ZwClose(x)

loc_A103FE:				; CODE XREF: CMFFlushHitsFile(x,x)+2C9j
		mov	eax, edi

loc_A10400:				; CODE XREF: CMFFlushHitsFile(x,x)+6Bj
					; CMFFlushHitsFile(x,x)+B2j
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_CMFFlushHitsFile@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall CMFGetFileSizeEx(x,	x)
_CMFGetFileSizeEx@8 proc near		; CODE XREF: CMFFlushHitsFile(x,x)+1D5p
					; CMFSystemThreadRoutine(x)+2D0p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		push	esi
		push	edi
		push	6
		mov	esi, ecx
		lea	edi, [ebp+var_20]
		pop	ecx
		xor	eax, eax
		mov	ebx, edx
		and	[ebp+var_28], eax
		and	[ebp+var_24], eax
		push	5
		rep stosd
		push	18h
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		push	esi
		call	_ZwQueryInformationFile@20 ; ZwQueryInformationFile(x,x,x,x,x)
		mov	edx, 0C0000000h
		mov	ecx, eax
		and	ecx, edx
		cmp	ecx, edx
		jz	short loc_A10465
		mov	eax, [ebp+var_18]
		mov	[ebx], eax
		mov	eax, [ebp+var_14]
		mov	[ebx+4], eax
		xor	eax, eax

loc_A10465:				; CODE XREF: CMFGetFileSizeEx(x,x)+46j
		mov	ecx, [ebp+var_4]
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn
_CMFGetFileSizeEx@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall CMFGetLargePageSectionSize(x, x)
_CMFGetLargePageSectionSize@8 proc near	; CODE XREF: CMFSystemThreadRoutine(x)+2F4p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		mov	ebx, ds:0FFDF0244h
		mov	eax, ecx
		push	esi
		shr	ebx, 0Ch
		mov	[ebp+var_14], eax
		push	edi
		mov	edi, edx
		test	ebx, ebx
		jnz	short loc_A1049D
		mov	esi, 0C00000BBh
		jmp	loc_A10542
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1049D:				; CODE XREF: CMFGetLargePageSectionSize(x,x)+1Dj
		mov	ecx, [eax]
		xor	esi, esi
		mov	eax, [eax+4]
		mov	[ebp+var_4], eax
		mov	eax, ecx
		and	eax, 0FFFh
		mov	[ebp+var_8], ecx
		or	eax, esi
		jz	short loc_A104BA
		xor	edx, edx
		inc	edx
		jmp	short loc_A104BC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A104BA:				; CODE XREF: CMFGetLargePageSectionSize(x,x)+3Fj
		mov	edx, esi

loc_A104BC:				; CODE XREF: CMFGetLargePageSectionSize(x,x)+44j
		mov	eax, [ebp+var_4]
		shrd	ecx, eax, 0Ch
		shr	eax, 0Ch
		add	ecx, edx
		mov	[ebp+var_10], ecx
		adc	eax, esi
		xor	edx, edx
		mov	[ebp+var_C], eax
		mov	eax, ecx
		div	ebx
		test	edx, edx
		jnz	short loc_A104E7
		mov	eax, [ebp+var_8]
		mov	[edi], eax
		mov	eax, [ebp+var_4]
		mov	[edi+4], eax
		jmp	short loc_A10542
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A104E7:				; CODE XREF: CMFGetLargePageSectionSize(x,x)+64j
		mov	esi, [ebp+var_10]
		xor	eax, eax
		mov	ecx, ebx
		sub	ecx, edx
		mov	edx, [ebp+var_C]
		shld	eax, ecx, 0Ch
		shld	edx, esi, 0Ch
		shl	ecx, 0Ch
		shl	esi, 0Ch
		add	ecx, esi
		push	0
		adc	eax, edx
		add	ecx, 0FFFFF001h
		mov	[edi], ecx
		adc	eax, 0FFFFFFFFh
		mov	[edi+4], eax
		shrd	ecx, eax, 0Ch
		pop	esi
		shr	eax, 0Ch
		add	ecx, 1
		push	esi
		push	ebx
		adc	eax, esi
		push	eax
		push	ecx
		call	__aullrem
		or	eax, edx
		jnz	short loc_A1053D
		cmp	[edi+4], esi
		jnz	short loc_A1053D
		mov	ecx, [ebp+var_14]
		mov	eax, [edi]
		cmp	eax, [ecx]
		jnb	short loc_A10542

loc_A1053D:				; CODE XREF: CMFGetLargePageSectionSize(x,x)+B9j
					; CMFGetLargePageSectionSize(x,x)+BEj
		mov	esi, 0C0000001h

loc_A10542:				; CODE XREF: CMFGetLargePageSectionSize(x,x)+24j
					; CMFGetLargePageSectionSize(x,x)+71j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
_CMFGetLargePageSectionSize@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	CMFReadCompressedSegment(void *,int)
_CMFReadCompressedSegment@16 proc near	; CODE XREF: CMFSystemThreadRoutine(x)+4CEp

var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 44h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_20], edx
		mov	esi, ecx
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], eax
		lea	edi, [ebp+var_40]
		mov	[ebp+var_C], eax
		mov	[ebp+var_14], eax
		mov	[ebp+var_4], eax
		push	6
		pop	ecx
		rep stosd
		mov	edi, eax
		test	esi, esi
		jz	loc_A10716
		mov	ebx, [ebp+arg_4]
		test	ebx, ebx
		jz	loc_A10716
		test	edx, edx
		jz	loc_A10716
		cmp	dword ptr [ebx+54h], 400h
		jbe	short loc_A105A2
		mov	esi, 0C000000Dh
		jmp	loc_A10745
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A105A2:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+4Dj
		call	_XpressDecodeCreate@8 ;	XpressDecodeCreate(x,x)
		mov	edi, eax
		mov	[ebp+arg_4], edi
		test	edi, edi
		jnz	short loc_A105BA
		mov	esi, 0C0000017h
		jmp	loc_A1071B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A105BA:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+65j
		push	esi
		xor	eax, eax
		mov	[ebp+var_40], 18h
		push	8000000h
		push	2
		push	eax
		mov	[ebp+var_3C], eax
		mov	[ebp+var_38], eax
		mov	[ebp+var_30], eax
		mov	[ebp+var_2C], eax
		lea	eax, [ebp+var_40]
		push	eax
		push	4
		lea	eax, [ebp+var_C]
		mov	[ebp+var_34], 240h
		push	eax
		call	_ZwCreateSection@28 ; ZwCreateSection(x,x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	loc_A1071B
		push	2
		push	400000h
		push	2
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		push	0
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	0FFFFFFFFh
		push	[ebp+var_C]
		call	_ZwMapViewOfSection@40 ; ZwMapViewOfSection(x,x,x,x,x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A1062A
		and	[ebp+var_4], 0
		jmp	loc_A1072B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1062A:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+D6j
		mov	esi, [ebp+var_14]
		mov	eax, 1060h
		cmp	esi, eax
		jnb	short loc_A10640

loc_A10636:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+FAj
		mov	esi, 0C0000206h
		jmp	loc_A1071B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10640:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+EBj
		cmp	[ebp+arg_0], eax
		jb	short loc_A10636
		mov	edi, [ebp+var_20]
		push	eax		; size_t
		push	ebx		; void *
		push	edi		; void *
		call	_memcpy
		mov	ecx, [ebp+arg_0]
		lea	eax, [esi-1060h]
		mov	[ebp+var_10], eax
		add	ecx, 0FFFFEFA0h
		mov	eax, [ebp+var_4]
		xor	esi, esi
		add	eax, 1060h
		mov	[ebp+var_18], ecx
		mov	[ebp+var_8], eax
		add	esp, 0Ch
		lea	eax, [edi+1060h]
		mov	[ebp+var_1C], esi
		mov	edi, [ebx+50h]
		mov	[ebp+arg_0], eax
		mov	eax, [ebx+54h]
		test	eax, eax
		jz	short loc_A10701
		lea	edx, [ebx+5Ch]
		mov	[ebp+var_20], edx

loc_A10691:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+1B6j
		dec	eax
		cmp	esi, eax
		jnz	short loc_A1069B
		mov	esi, [ebx+58h]
		jmp	short loc_A106A0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1069B:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+14Bj
		mov	esi, [edx+4]
		sub	esi, [edx]

loc_A106A0:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+150j
		cmp	esi, [ebp+var_10]
		ja	short loc_A1070C
		test	ecx, ecx
		jz	short loc_A1070C
		cmp	edi, ecx
		jbe	short loc_A106AF
		mov	edi, ecx

loc_A106AF:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+162j
		cmp	esi, edi
		jnz	short loc_A106C4
		push	edi		; size_t
		push	[ebp+var_8]	; void *
		push	[ebp+arg_0]	; void *
		call	_memcpy
		add	esp, 0Ch
		jmp	short loc_A106D9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A106C4:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+168j
		mov	edx, [ebp+arg_0]
		mov	ecx, [ebp+arg_4]
		push	esi
		push	[ebp+var_8]
		push	edi
		push	edi
		call	_XpressDecode@24 ; XpressDecode(x,x,x,x,x,x)
		cmp	eax, edi
		jnz	short loc_A10705

loc_A106D9:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+179j
		add	[ebp+var_8], esi
		sub	[ebp+var_10], esi
		mov	ecx, [ebp+var_18]
		mov	esi, [ebp+var_1C]
		sub	ecx, edi
		add	[ebp+arg_0], edi
		inc	esi
		mov	edx, [ebp+var_20]
		mov	eax, [ebx+54h]
		add	edx, 4
		mov	[ebp+var_18], ecx
		mov	[ebp+var_1C], esi
		mov	[ebp+var_20], edx
		cmp	esi, eax
		jb	short loc_A10691

loc_A10701:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+140j
		xor	esi, esi
		jmp	short loc_A10711
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10705:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+18Ej
		mov	esi, 0C000025Fh
		jmp	short loc_A10711
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1070C:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+15Aj
					; CMFReadCompressedSegment(x,x,x,x)+15Ej
		mov	esi, 0C0000206h

loc_A10711:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+1BAj
					; CMFReadCompressedSegment(x,x,x,x)+1C1j
		mov	edi, [ebp+arg_4]
		jmp	short loc_A1071B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10716:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+2Dj
					; CMFReadCompressedSegment(x,x,x,x)+38j ...
		mov	esi, 0C000000Dh

loc_A1071B:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+6Cj
					; CMFReadCompressedSegment(x,x,x,x)+A9j ...
		cmp	[ebp+var_4], 0
		jz	short loc_A1072B
		push	[ebp+var_4]
		push	0FFFFFFFFh
		call	_ZwUnmapViewOfSection@8	; ZwUnmapViewOfSection(x,x)

loc_A1072B:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+DCj
					; CMFReadCompressedSegment(x,x,x,x)+1D6j
		cmp	[ebp+var_C], 0
		jz	short loc_A10739
		push	[ebp+var_C]
		call	_ZwClose@4	; ZwClose(x)

loc_A10739:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+1E6j
		test	edi, edi
		jz	short loc_A10745
		push	ecx
		mov	ecx, edi
		call	_XpressDecodeClose@12 ;	XpressDecodeClose(x,x,x)

loc_A10745:				; CODE XREF: CMFReadCompressedSegment(x,x,x,x)+54j
					; CMFReadCompressedSegment(x,x,x,x)+1F2j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
_CMFReadCompressedSegment@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall CMFRegisterEventTime(x)
_CMFRegisterEventTime@4	proc near	; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+211p
					; NtMapCMFModule(x,x,x,x,x,x)+33Ap ...

var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_C		= dword	ptr -0Ch
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 58h
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+58h+var_4], eax
		push	esi
		push	edi
		xor	edi, edi
		lea	eax, [esp+60h+var_40]
		push	offset ??_C@_1HO@HPCDOJBK@?$AA?2?$AAR?$AAE?$AAG?$AAI?$AAS?$AAT?$AAR?$AAY?$AA?2?$AAM?$AAA?$AAC?$AAH?$AAI@NNGAKEGL@
		push	eax
		mov	si, cx
		mov	[esp+68h+var_40], edi
		mov	[esp+68h+var_3C], edi
		mov	[esp+68h+var_54], edi
		mov	[esp+68h+var_50], edi
		mov	[esp+68h+var_58], edi
		mov	[esp+68h+var_38], edi
		mov	[esp+68h+var_34], edi
		mov	[esp+68h+var_44], edi
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		push	edi
		push	edi
		push	edi
		lea	eax, [esp+6Ch+var_40]
		mov	[esp+6Ch+var_30], 18h
		mov	[esp+6Ch+var_28], eax
		lea	eax, [esp+6Ch+var_30]
		push	edi
		push	eax
		push	2001Fh
		lea	eax, [esp+78h+var_58]
		mov	[esp+78h+var_2C], edi
		push	eax
		mov	[esp+7Ch+var_24], 240h
		mov	[esp+7Ch+var_20], edi
		mov	[esp+7Ch+var_1C], edi
		call	_ZwCreateKey@28	; ZwCreateKey(x,x,x,x,x,x,x)
		test	eax, eax
		js	loc_A1090D
		lea	eax, [esp+60h+var_38]
		push	eax
		call	KeQuerySystemTime
		movzx	eax, si
		push	0Bh
		pop	esi
		sub	eax, 1
		jz	short loc_A10823
		sub	eax, 1
		jz	short loc_A1080F
		dec	eax
		sub	eax, 1
		jz	short loc_A10808
		mov	eax, 0C000000Dh
		jmp	loc_A1090D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10808:				; CODE XREF: CMFRegisterEventTime(x)+AEj
		push	offset ??_C@_1BI@OHJGJLDO@?$AAC?$AAM?$AAF?$AAS?$AAt?$AAo?$AAp?$AAT?$AAi?$AAm?$AAe@NNGAKEGL@ ; "CMFStopTime"
		jmp	short loc_A10814
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1080F:				; CODE XREF: CMFRegisterEventTime(x)+A8j
		push	offset ??_C@_1BK@GCJNNPH@?$AAC?$AAM?$AAF?$AAS?$AAt?$AAa?$AAr?$AAt?$AAT?$AAi?$AAm?$AAe@NNGAKEGL@

loc_A10814:				; CODE XREF: CMFRegisterEventTime(x)+BFj
		lea	eax, [esp+64h+var_54]
		push	eax
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		jmp	loc_A108E9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10823:				; CODE XREF: CMFRegisterEventTime(x)+A3j
		push	offset ??_C@_1BK@GCJNNPH@?$AAC?$AAM?$AAF?$AAS?$AAt?$AAa?$AAr?$AAt?$AAT?$AAi?$AAm?$AAe@NNGAKEGL@
		lea	eax, [esp+64h+var_54]
		push	eax
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		lea	eax, [esp+60h+var_44]
		push	eax
		push	14h
		lea	eax, [esp+68h+var_18]
		push	eax
		push	2
		lea	eax, [esp+70h+var_54]
		push	eax
		push	[esp+74h+var_58]
		call	_ZwQueryValueKey@24 ; ZwQueryValueKey(x,x,x,x,x,x)
		test	eax, eax
		js	short loc_A10886
		cmp	[esp+60h+var_14], esi
		jnz	short loc_A10886
		push	offset ??_C@_1CC@IEGFOIJJ@?$AAC?$AAM?$AAF?$AAL?$AAa?$AAs?$AAt?$AAS?$AAt?$AAa?$AAr?$AAt?$AAT?$AAi?$AAm@NNGAKEGL@	; "CMFLastStartTime"
		lea	eax, [esp+64h+var_4C]
		mov	[esp+64h+var_4C], edi
		push	eax
		mov	[esp+68h+var_48], edi
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		push	8
		lea	eax, [esp+64h+var_C]
		push	eax
		push	esi
		push	edi
		lea	eax, [esp+70h+var_4C]
		push	eax
		push	[esp+74h+var_58]
		call	_ZwSetValueKey@24 ; ZwSetValueKey(x,x,x,x,x,x)

loc_A10886:				; CODE XREF: CMFRegisterEventTime(x)+102j
					; CMFRegisterEventTime(x)+108j
		push	offset ??_C@_1CA@HHFNNGD@?$AAS?$AAy?$AAs?$AAt?$AAe?$AAm?$AAS?$AAt?$AAa?$AAr?$AAt?$AAT?$AAi?$AAm?$AAe@NNGAKEGL@
		lea	eax, [esp+64h+var_54]
		push	eax
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		lea	eax, [esp+60h+var_44]
		push	eax
		push	14h
		lea	eax, [esp+68h+var_18]
		push	eax
		push	2
		lea	eax, [esp+70h+var_54]
		push	eax
		push	[esp+74h+var_58]
		call	_ZwQueryValueKey@24 ; ZwQueryValueKey(x,x,x,x,x,x)
		test	eax, eax
		js	short loc_A108E9
		cmp	[esp+60h+var_14], esi
		jnz	short loc_A108E9
		push	offset ??_C@_1CI@GJIDLDKO@?$AAS?$AAy?$AAs?$AAt?$AAe?$AAm?$AAL?$AAa?$AAs?$AAt?$AAS?$AAt?$AAa?$AAr?$AAt@NNGAKEGL@
		lea	eax, [esp+64h+var_4C]
		mov	[esp+64h+var_4C], edi
		push	eax
		mov	[esp+68h+var_48], edi
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		push	8
		lea	eax, [esp+64h+var_C]
		push	eax
		push	esi
		push	edi
		lea	eax, [esp+70h+var_4C]
		push	eax
		push	[esp+74h+var_58]
		call	_ZwSetValueKey@24 ; ZwSetValueKey(x,x,x,x,x,x)

loc_A108E9:				; CODE XREF: CMFRegisterEventTime(x)+D0j
					; CMFRegisterEventTime(x)+165j	...
		push	8
		lea	eax, [esp+64h+var_38]
		push	eax
		push	esi
		push	edi
		lea	eax, [esp+70h+var_54]
		push	eax
		push	[esp+74h+var_58]
		call	_ZwSetValueKey@24 ; ZwSetValueKey(x,x,x,x,x,x)
		push	[esp+60h+var_58]
		mov	esi, eax
		call	_ZwClose@4	; ZwClose(x)
		mov	eax, esi

loc_A1090D:				; CODE XREF: CMFRegisterEventTime(x)+8Aj
					; CMFRegisterEventTime(x)+B5j
		mov	ecx, [esp+60h+var_4]
		pop	edi
		pop	esi
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn
_CMFRegisterEventTime@4	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall CMFSystemThreadRoutine(x)
_CMFSystemThreadRoutine@4 proc near	; DATA XREF: NtMapCMFModule(x,x,x,x,x,x)+550o

var_290		= dword	ptr -290h
var_28A		= byte ptr -28Ah
var_288		= dword	ptr -288h
var_284		= dword	ptr -284h
var_280		= dword	ptr -280h
var_27A		= byte ptr -27Ah
var_279		= byte ptr -279h
var_278		= dword	ptr -278h
var_274		= dword	ptr -274h
var_270		= dword	ptr -270h
var_26C		= dword	ptr -26Ch
var_268		= dword	ptr -268h
var_264		= dword	ptr -264h
var_260		= dword	ptr -260h
var_25C		= dword	ptr -25Ch
var_258		= dword	ptr -258h
var_254		= dword	ptr -254h
var_250		= dword	ptr -250h
var_24C		= dword	ptr -24Ch
var_248		= dword	ptr -248h
var_244		= dword	ptr -244h
var_240		= dword	ptr -240h
var_23C		= dword	ptr -23Ch
var_238		= dword	ptr -238h
var_234		= dword	ptr -234h
var_230		= dword	ptr -230h
var_22C		= dword	ptr -22Ch
var_228		= dword	ptr -228h
var_224		= dword	ptr -224h
var_220		= dword	ptr -220h
var_21C		= dword	ptr -21Ch
var_218		= dword	ptr -218h
var_214		= dword	ptr -214h
var_210		= word ptr -210h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 284h
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+284h+var_4], eax
		push	ebx
		push	esi
		push	edi
		xor	edx, edx
		xor	eax, eax
		mov	ebx, [ebp+arg_0]
		mov	[esp+290h+var_228], edx
		mov	[esp+290h+var_224], edx
		mov	[esp+290h+var_230], edx
		mov	[esp+290h+var_22C], edx
		mov	[esp+290h+var_268], edx
		mov	[esp+290h+var_264], edx
		mov	[esp+290h+var_220], edx
		mov	[esp+290h+var_21C], edx
		mov	[esp+290h+var_250], edx
		mov	[esp+290h+var_218], edx
		mov	[esp+290h+var_214], edx
		mov	[esp+290h+var_279], dl
		mov	[esp+290h+var_260], edx
		mov	[esp+290h+var_26C], edx
		mov	[esp+290h+var_254], edx
		mov	[esp+290h+var_24C], edx
		mov	[esp+290h+var_25C], edx
		mov	[esp+290h+var_270], edx
		lea	edi, [esp+290h+var_248]
		push	6
		pop	ecx
		rep stosd
		mov	edi, edx
		mov	[esp+290h+var_280], edi
		test	ebx, ebx
		jz	loc_A10EE4
		mov	eax, [ebx+28h]
		cmp	eax, 10h
		jnz	short loc_A109C5
		push	dword ptr [ebx+4]
		mov	[esp+294h+var_274], offset aRescdir ; "RESCDIR"
		push	offset ??_C@_1CK@DHBGEEEI@?$AA?2?$AAS?$AAy?$AAs?$AAt?$AAe?$AAm?$AAR?$AAo?$AAo?$AAt?$AA?2?$AAR?$AAe?$AAs@NNGAKEGL@ ; "\\SystemRoot\\Rescache"
		push	offset ??_C@_1CO@CAEBGMOI@?$AA?$CF?$AAs?$AA?2?$AAr?$AAc?$AA?$CF?$AA0?$AA4?$AAu?$AA?2?$AAr?$AAe?$AAs?$AAc?$AAa@NNGAKEGL@
		jmp	loc_A10A47
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A109C5:				; CODE XREF: CMFSystemThreadRoutine(x)+8Bj
		cmp	eax, 20h
		jnz	short loc_A10A27
		push	636D6650h
		mov	eax, 1060h
		push	eax
		push	1
		mov	[esp+29Ch+var_258], eax
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		mov	[esp+290h+var_280], edi
		test	edi, edi
		jnz	short loc_A109F4
		mov	esi, 0C0000017h
		jmp	loc_A10E63
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A109F4:				; CODE XREF: CMFSystemThreadRoutine(x)+CAj
		push	dword ptr [ebx+18h]
		lea	eax, [esp+294h+var_210]
		mov	[esp+294h+var_274], offset aRescseg ; "RESCSEG"
		push	dword ptr [ebx+4]
		mov	[esp+298h+var_278], edi
		push	offset ??_C@_1CK@DHBGEEEI@?$AA?2?$AAS?$AAy?$AAs?$AAt?$AAe?$AAm?$AAR?$AAo?$AAo?$AAt?$AA?2?$AAR?$AAe?$AAs@NNGAKEGL@ ; "\\SystemRoot\\Rescache"
		push	offset ??_C@_1DA@KEPEHAO@?$AA?$CF?$AAs?$AA?2?$AAr?$AAc?$AA?$CF?$AA0?$AA4?$AAu?$AA?2?$AAs?$AAe?$AAg?$AAm?$AAe@NNGAKEGL@ ; wchar_t *
		push	104h		; int
		push	eax		; wchar_t *
		call	RtlStringCchPrintfW
		add	esp, 18h
		jmp	short loc_A10A6F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10A27:				; CODE XREF: CMFSystemThreadRoutine(x)+AAj
		cmp	eax, 100h
		jnz	loc_A10E5E
		push	dword ptr [ebx+4]
		mov	[esp+294h+var_274], offset aReschit ; "RESCHIT"
		push	offset ??_C@_1CK@DHBGEEEI@?$AA?2?$AAS?$AAy?$AAs?$AAt?$AAe?$AAm?$AAR?$AAo?$AAo?$AAt?$AA?2?$AAR?$AAe?$AAs@NNGAKEGL@ ; "\\SystemRoot\\Rescache"
		push	offset ??_C@_1CO@FCIFCGHL@?$AA?$CF?$AAs?$AA?2?$AAr?$AAc?$AA?$CF?$AA0?$AA4?$AAu?$AA?2?$AAr?$AAe?$AAs?$AAc?$AAa@NNGAKEGL@	; wchar_t *

loc_A10A47:				; CODE XREF: CMFSystemThreadRoutine(x)+A2j
		lea	eax, [esp+29Ch+var_218]
		mov	[esp+29Ch+var_258], 8
		mov	[esp+29Ch+var_278], eax
		lea	eax, [esp+29Ch+var_210]
		push	104h		; int
		push	eax		; wchar_t *
		call	RtlStringCchPrintfW
		add	esp, 14h

loc_A10A6F:				; CODE XREF: CMFSystemThreadRoutine(x)+107j
		mov	edi, 0C0000000h
		mov	esi, eax
		and	eax, edi
		cmp	eax, edi
		jz	short loc_A10AD9
		lea	eax, [esp+290h+var_210]
		push	eax
		lea	eax, [esp+294h+var_220]
		push	eax
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		xor	ecx, ecx
		mov	[esp+290h+var_248], 18h
		push	ecx
		lea	eax, [esp+294h+var_220]
		mov	[esp+294h+var_244], ecx
		mov	[esp+294h+var_240], eax
		lea	eax, [esp+294h+var_228]
		push	7
		push	eax
		lea	eax, [esp+29Ch+var_248]
		mov	[esp+29Ch+var_23C], 240h
		push	eax
		push	edi
		lea	eax, [esp+2A4h+var_26C]
		mov	[esp+2A4h+var_238], ecx
		push	eax
		mov	[esp+2A8h+var_234], ecx
		call	_ZwOpenFile@24	; ZwOpenFile(x,x,x,x,x,x)
		mov	esi, eax
		and	eax, edi
		cmp	eax, edi
		jnz	short loc_A10AE2
		and	[esp+290h+var_26C], 0

loc_A10AD9:				; CODE XREF: CMFSystemThreadRoutine(x)+15Cj
					; CMFSystemThreadRoutine(x)+203j ...
		mov	edi, [esp+290h+var_280]
		jmp	loc_A10E63
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10AE2:				; CODE XREF: CMFSystemThreadRoutine(x)+1B4j
		xor	eax, eax
		mov	[esp+290h+var_248], 18h
		push	eax
		mov	[esp+294h+var_244], eax
		mov	[esp+294h+var_240], eax
		mov	[esp+294h+var_238], eax
		mov	[esp+294h+var_234], eax
		lea	eax, [esp+294h+var_248]
		push	1
		push	eax
		push	1F0003h
		lea	eax, [esp+2A0h+var_260]
		mov	[esp+2A0h+var_23C], 200h
		push	eax
		call	_ZwCreateEvent@20 ; ZwCreateEvent(x,x,x,x,x)
		mov	esi, eax
		and	eax, edi
		cmp	eax, edi
		jz	short loc_A10AD9
		xor	ecx, ecx
		lea	eax, [esp+290h+var_268]
		push	ecx
		push	eax
		push	[esp+298h+var_258]
		lea	eax, [esp+29Ch+var_228]
		push	[esp+29Ch+var_278]
		push	eax
		push	ecx
		push	ecx
		push	[esp+2ACh+var_260]
		push	[esp+2B0h+var_26C]
		call	_ZwReadFile@36	; ZwReadFile(x,x,x,x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A10AD9
		push	0
		push	0
		push	[esp+298h+var_260]
		call	_ZwWaitForSingleObject@12 ; ZwWaitForSingleObject(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	short loc_A10B74

loc_A10B60:				; CODE XREF: CMFSystemThreadRoutine(x)+4B4j
		mov	edi, [esp+290h+var_280]
		js	loc_A10E63
		mov	esi, 0C0000001h
		jmp	loc_A10E63
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10B74:				; CODE XREF: CMFSystemThreadRoutine(x)+240j
		mov	ecx, [esp+290h+var_278]
		mov	edx, [esp+290h+var_274]
		mov	eax, [ecx]
		cmp	eax, [edx]
		jnz	loc_A10E54
		mov	eax, [ecx+4]
		cmp	eax, [edx+4]
		jnz	loc_A10E54
		mov	esi, [ebx+28h]
		xor	edx, edx
		mov	eax, [esp+290h+var_280]
		cmp	esi, 20h
		jnz	short loc_A10BB2
		cmp	[eax+4Ch], edx
		jz	short loc_A10BB2
		or	dword ptr [ebx+14h], 4
		mov	[esp+290h+var_279], 1
		mov	byte ptr [ebx+0Ch], 1

loc_A10BB2:				; CODE XREF: CMFSystemThreadRoutine(x)+280j
					; CMFSystemThreadRoutine(x)+285j
		cmp	byte ptr [ebx+0Ch], 0
		mov	ecx, [esp+290h+var_26C]
		mov	[esp+290h+var_278], edx
		mov	[esp+290h+var_274], edx
		mov	[esp+290h+var_258], ecx
		jz	short loc_A10C44
		mov	[esp+290h+var_258], edx
		mov	[esp+290h+var_268], edx
		mov	[esp+290h+var_264], edx
		cmp	esi, 10h
		jz	short loc_A10BEA
		cmp	esi, 100h
		jz	short loc_A10BEA
		mov	eax, [eax+20h]
		mov	[esp+290h+var_268], eax
		jmp	short loc_A10C06
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10BEA:				; CODE XREF: CMFSystemThreadRoutine(x)+2B9j
					; CMFSystemThreadRoutine(x)+2C1j
		lea	edx, [esp+290h+var_268]
		call	_CMFGetFileSizeEx@8 ; CMFGetFileSizeEx(x,x)
		mov	esi, eax
		and	eax, edi
		cmp	eax, edi
		jz	loc_A10AD9
		mov	eax, [esp+290h+var_268]
		mov	esi, [ebx+28h]

loc_A10C06:				; CODE XREF: CMFSystemThreadRoutine(x)+2CAj
		lea	edx, [esp+290h+var_230]
		mov	[esp+290h+var_278], eax
		lea	ecx, [esp+290h+var_268]
		call	_CMFGetLargePageSectionSize@8 ;	CMFGetLargePageSectionSize(x,x)
		test	eax, eax
		js	short loc_A10C2E
		cmp	dword ptr [ebx], 0
		jge	short loc_A10C2E
		mov	eax, [esp+290h+var_230]
		lea	ecx, [esp+290h+var_230]
		mov	[esp+290h+var_274], ecx
		jmp	short loc_A10C40
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10C2E:				; CODE XREF: CMFSystemThreadRoutine(x)+2FBj
					; CMFSystemThreadRoutine(x)+300j
		and	dword ptr [ebx], 7FFFFFFFh
		lea	eax, [esp+290h+var_268]
		mov	[esp+290h+var_274], eax
		mov	eax, [esp+290h+var_278]

loc_A10C40:				; CODE XREF: CMFSystemThreadRoutine(x)+30Ej
		mov	[esp+290h+var_250], eax

loc_A10C44:				; CODE XREF: CMFSystemThreadRoutine(x)+2A8j
		cmp	esi, 100h
		jz	short loc_A10C63
		xor	edx, edx
		lea	ecx, [esp+290h+var_24C]
		call	_CMFCreateSecurityDescriptor@8 ; CMFCreateSecurityDescriptor(x,x)
		mov	esi, eax
		and	eax, edi
		cmp	eax, edi
		jz	loc_A10AD9

loc_A10C63:				; CODE XREF: CMFSystemThreadRoutine(x)+32Cj
		push	[esp+290h+var_258]
		mov	eax, [esp+294h+var_24C]
		xor	ecx, ecx
		push	dword ptr [ebx]
		mov	[esp+298h+var_244], ecx
		push	4
		push	[esp+29Ch+var_274]
		mov	[esp+2A0h+var_240], ecx
		mov	[esp+2A0h+var_238], eax
		mov	[esp+2A0h+var_234], ecx
		jmp	short loc_A10CCD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10C87:				; CODE XREF: CMFSystemThreadRoutine(x)+3D4j
		cmp	byte ptr [ebx+0Ch], 0
		jz	loc_A10D2F
		mov	ecx, [ebx]
		test	ecx, ecx
		jns	loc_A10D2F
		push	[esp+2A0h+var_268]
		mov	eax, [esp+2A4h+var_288]
		and	ecx, 7FFFFFFFh
		mov	[esp+2A4h+var_260], eax
		xor	edx, edx
		mov	eax, [esp+2A4h+var_25C]
		push	ecx
		mov	[esp+2A8h+var_248], eax
		lea	eax, [esp+2A8h+var_278]
		push	4
		mov	[ebx], ecx
		mov	[esp+2ACh+var_254], edx
		mov	[esp+2ACh+var_250], edx
		mov	[esp+2ACh+var_244], edx
		push	eax

loc_A10CCD:				; CODE XREF: CMFSystemThreadRoutine(x)+367j
		lea	eax, [esp+2B0h+var_258]
		mov	[esp+2B0h+var_258], 18h
		push	eax
		push	6
		lea	eax, [esp+2B8h+var_26C]
		mov	[esp+2B8h+var_24C], 240h
		push	eax
		call	_ZwCreateSection@28 ; ZwCreateSection(x,x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A10C87
		mov	eax, ds:_MmSectionObjectType
		lea	ecx, [esp+2A0h+var_284]
		xor	edx, edx
		push	edx
		push	ecx
		push	edx
		push	eax
		push	0F001Fh
		push	[esp+2B4h+var_26C]
		mov	[esp+2B8h+var_284], edx
		call	_ObReferenceObjectByHandle@24 ;	ObReferenceObjectByHandle(x,x,x,x,x,x)
		mov	ecx, [esp+2A0h+var_284]
		mov	esi, eax
		and	eax, edi
		mov	[esp+2A0h+var_264], ecx
		cmp	eax, edi
		jnz	short loc_A10D39
		and	[esp+2A0h+var_264], 0
		jmp	loc_A10AD9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10D2F:				; CODE XREF: CMFSystemThreadRoutine(x)+36Dj
					; CMFSystemThreadRoutine(x)+377j
		and	[esp+2A0h+var_26C], 0
		jmp	loc_A10AD9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10D39:				; CODE XREF: CMFSystemThreadRoutine(x)+405j
		cmp	byte ptr [ebx+0Ch], 0
		jz	loc_A10E0E
		push	4
		push	400000h
		push	2
		lea	eax, [esp+2ACh+var_260]
		xor	ecx, ecx
		push	eax
		lea	eax, [esp+2B0h+var_278]
		mov	[esp+2B0h+var_278], ecx
		push	eax
		push	ecx
		push	ecx
		lea	eax, [esp+2BCh+var_280]
		mov	[esp+2BCh+var_274], ecx
		push	eax
		push	0FFFFFFFFh
		push	[esp+2C4h+var_26C]
		call	_ZwMapViewOfSection@40 ; ZwMapViewOfSection(x,x,x,x,x,x,x,x,x,x)
		mov	esi, eax
		and	eax, edi
		cmp	eax, edi
		jnz	short loc_A10D84
		and	[esp+2A0h+var_280], 0
		jmp	loc_A10AD9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10D84:				; CODE XREF: CMFSystemThreadRoutine(x)+45Aj
		cmp	byte ptr [esp+17h], 0
		jnz	short loc_A10DD7
		xor	edi, edi
		lea	eax, [esp+2A0h+var_278]
		push	edi
		push	eax
		push	[esp+2A8h+var_288]
		lea	eax, [esp+2ACh+var_238]
		mov	[esp+2ACh+var_278], edi
		push	[esp+2ACh+var_280]
		mov	[esp+2B0h+var_274], edi
		push	eax
		push	edi
		push	edi
		push	[esp+2BCh+var_270]
		push	dword ptr [esp+44h]
		call	_ZwReadFile@36	; ZwReadFile(x,x,x,x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	loc_A10AD9
		push	edi
		push	edi
		push	[esp+2A8h+var_270]
		call	_ZwWaitForSingleObject@12 ; ZwWaitForSingleObject(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	short loc_A10DF7
		jmp	loc_A10B60
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10DD7:				; CODE XREF: CMFSystemThreadRoutine(x)+46Bj
		mov	edi, [esp+2A0h+var_290]
		push	edi		; int
		push	[esp+2A4h+var_288] ; void *
		and	dword ptr [edi+4Ch], 0
		mov	edx, [esp+2A8h+var_280]
		mov	ecx, [esp+2Ch]
		call	_CMFReadCompressedSegment@16 ; CMFReadCompressedSegment(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A10E63

loc_A10DF7:				; CODE XREF: CMFSystemThreadRoutine(x)+4B2j
		push	[esp+2A0h+var_280]
		push	0FFFFFFFFh
		call	_ZwUnmapViewOfSection@8	; ZwUnmapViewOfSection(x,x)
		mov	ecx, [esp+2A0h+var_264]
		xor	edx, edx
		mov	[esp+2A0h+var_280], edx
		jmp	short loc_A10E10
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10E0E:				; CODE XREF: CMFSystemThreadRoutine(x)+41Fj
		xor	edx, edx

loc_A10E10:				; CODE XREF: CMFSystemThreadRoutine(x)+4EEj
		mov	eax, [ebx+24h]
		test	eax, eax
		jz	loc_A10AD9
		mov	[eax], ecx
		cmp	dword ptr [ebx+28h], 10h
		mov	[esp+2A0h+var_264], edx
		jnz	loc_A10AD9
		cmp	_CMFCacheIndex,	2710h
		jnz	loc_A10AD9
		mov	eax, [ebx+14h]
		and	eax, 0Fh
		or	_CMFFlagsCache,	eax
		mov	eax, [ebx+4]
		mov	_CMFCacheIndex,	eax
		jmp	loc_A10AD9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10E54:				; CODE XREF: CMFSystemThreadRoutine(x)+262j
					; CMFSystemThreadRoutine(x)+26Ej
		mov	esi, 0C000A000h
		jmp	loc_A10AD9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A10E5E:				; CODE XREF: CMFSystemThreadRoutine(x)+10Ej
		mov	esi, 0C000000Dh

loc_A10E63:				; CODE XREF: CMFSystemThreadRoutine(x)+D1j
					; CMFSystemThreadRoutine(x)+1BFj ...
		cmp	[esp+290h+var_260], 0
		jz	short loc_A10E73
		push	[esp+290h+var_260]
		call	_ZwClose@4	; ZwClose(x)

loc_A10E73:				; CODE XREF: CMFSystemThreadRoutine(x)+54Aj
		cmp	[esp+290h+var_270], 0
		jz	short loc_A10E85
		push	[esp+290h+var_270]
		push	0FFFFFFFFh
		call	_ZwUnmapViewOfSection@8	; ZwUnmapViewOfSection(x,x)

loc_A10E85:				; CODE XREF: CMFSystemThreadRoutine(x)+55Aj
		cmp	[esp+290h+var_25C], 0
		jz	short loc_A10E95
		push	[esp+290h+var_25C]
		call	_ZwClose@4	; ZwClose(x)

loc_A10E95:				; CODE XREF: CMFSystemThreadRoutine(x)+56Cj
		cmp	[esp+290h+var_26C], 0
		jz	short loc_A10EA5
		push	[esp+290h+var_26C]
		call	_ZwClose@4	; ZwClose(x)

loc_A10EA5:				; CODE XREF: CMFSystemThreadRoutine(x)+57Cj
		mov	eax, [esp+290h+var_24C]
		test	eax, eax
		jz	short loc_A10EB5
		push	0
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A10EB5:				; CODE XREF: CMFSystemThreadRoutine(x)+58Dj
		mov	eax, [esp+290h+var_254]
		test	eax, eax
		jz	short loc_A10EC4
		mov	ecx, eax
		call	ObfDereferenceObject

loc_A10EC4:				; CODE XREF: CMFSystemThreadRoutine(x)+59Dj
		test	edi, edi
		jz	short loc_A10ED0
		push	0
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A10ED0:				; CODE XREF: CMFSystemThreadRoutine(x)+5A8j
		mov	eax, [ebx+10h]
		mov	[ebx+20h], esi
		test	eax, eax
		jz	short loc_A10EE4
		push	0
		push	1
		push	eax
		call	_KeSetEvent@12	; KeSetEvent(x,x,x)

loc_A10EE4:				; CODE XREF: CMFSystemThreadRoutine(x)+7Fj
					; CMFSystemThreadRoutine(x)+5BAj
		mov	ecx, [esp+290h+var_4]
		pop	edi
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn	4
_CMFSystemThreadRoutine@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall CMFUnmapModules(x)
_CMFUnmapModules@4 proc	near		; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+209p
		mov	edi, edi
		push	ebx
		mov	ebx, ecx
		push	esi
		test	bl, 20h
		jz	short loc_A10F3B
		push	edi
		mov	edi, _CMFSegmentSectionPointer
		xor	eax, eax
		mov	ecx, offset _CMFSegmentSectionPointer
		xchg	eax, [ecx]
		test	edi, edi
		jz	short loc_A10F3A
		xor	esi, esi

loc_A10F1C:				; CODE XREF: CMFUnmapModules(x)+35j
		mov	ecx, [edi+esi*4]
		test	ecx, ecx
		jz	short loc_A10F2C
		call	ObfDereferenceObject
		and	dword ptr [edi+esi*4], 0

loc_A10F2C:				; CODE XREF: CMFUnmapModules(x)+26j
		inc	esi
		cmp	esi, 1Eh
		jb	short loc_A10F1C
		push	0
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A10F3A:				; CODE XREF: CMFUnmapModules(x)+1Dj
		pop	edi

loc_A10F3B:				; CODE XREF: CMFUnmapModules(x)+9j
		test	bl, 10h
		jz	short loc_A10F60
		mov	ecx, _CMFDirectorySectionPointer
		test	ecx, ecx
		jz	short loc_A10F60
		xor	edx, edx
		mov	esi, offset _CMFDirectorySectionPointer
		mov	eax, ecx
		lock cmpxchg [esi], edx
		cmp	ecx, eax
		jnz	short loc_A10F60
		call	ObfDereferenceObject

loc_A10F60:				; CODE XREF: CMFUnmapModules(x)+43j
					; CMFUnmapModules(x)+4Dj ...
		test	ebx, 100h
		jz	short loc_A10F88
		mov	ecx, _CMFHitsSectionPointer
		test	ecx, ecx
		jz	short loc_A10F88
		xor	edx, edx
		mov	esi, offset _CMFHitsSectionPointer
		mov	eax, ecx
		lock cmpxchg [esi], edx
		cmp	ecx, eax
		jnz	short loc_A10F88
		call	ObfDereferenceObject

loc_A10F88:				; CODE XREF: CMFUnmapModules(x)+6Bj
					; CMFUnmapModules(x)+75j ...
		pop	esi
		xor	eax, eax
		pop	ebx
		retn
_CMFUnmapModules@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall NtMapCMFModule(x, x, x, x, x, x)
_NtMapCMFModule@24 proc	near		; DATA XREF: .text:00580F94o

var_C8		= dword	ptr -0C8h
var_B8		= dword	ptr -0B8h
var_B4		= dword	ptr -0B4h
var_B0		= dword	ptr -0B0h
var_AC		= dword	ptr -0ACh
var_A8		= dword	ptr -0A8h
var_A4		= dword	ptr -0A4h
var_A0		= dword	ptr -0A0h
var_9C		= dword	ptr -9Ch
var_98		= dword	ptr -98h
var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= byte ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_1D		= byte ptr -1Dh
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

; FUNCTION CHUNK AT 00A111CD SIZE 0000056F BYTES
; FUNCTION CHUNK AT 00A11770 SIZE 00000031 BYTES

		push	0B8h
		push	offset dword_6AAA28
		call	__SEH_prolog4
		xor	ebx, ebx
		mov	[ebp+var_30], ebx
		mov	[ebp+var_3C], ebx
		push	6
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_B0]
		rep stosd
		mov	[ebp+var_50], ebx
		mov	[ebp+var_4C], ebx
		lea	edi, [ebp+var_C8]
		stosd
		stosd
		stosd
		stosd
		mov	[ebp+var_58], ebx
		push	2Ch		; size_t
		push	ebx		; int
		lea	eax, [ebp+var_98]
		push	eax		; void *
		call	_memset
		add	esp, 0Ch
		mov	[ebp+var_24], ebx
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_30], ebx
		mov	[ebp+var_3C], ebx
		mov	eax, large fs:124h
		mov	al, [eax+15Ah]
		mov	byte ptr [ebp+var_5C], al
		test	al, al
		jnz	short loc_A11002

loc_A10FF5:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+7Bj
		mov	esi, 0C0000001h

loc_A10FFA:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+8Dj
					; NtMapCMFModule(x,x,x,x,x,x)+EAj
		mov	[ebp+var_1C], esi
		jmp	loc_A11770
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11002:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+66j
		cmp	_InitSafeBootMode, ebx
		jnz	short loc_A10FF5
		mov	edi, [ebp+arg_0]
		test	edi, 0FFE0FE81h
		jz	short loc_A1101C

loc_A11015:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+D0j
					; NtMapCMFModule(x,x,x,x,x,x)+D4j
		mov	esi, 0C000000Dh
		jmp	short loc_A10FFA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1101C:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+86j
		mov	ecx, offset _CMFLock
		call	MUIInitializeResourceLock
		mov	esi, eax
		mov	[ebp+var_1C], esi
		mov	ecx, esi
		mov	eax, 0C0000000h
		and	ecx, eax
		cmp	ecx, eax
		jz	loc_A11770
		test	edi, 20000h
		jz	loc_A111CD
		mov	edx, edi
		mov	esi, 180000h
		and	edx, esi
		setnz	cl
		bt	edi, 12h
		setb	al
		test	cl, al
		jnz	short loc_A11015
		cmp	edx, esi
		jz	short loc_A11015
		mov	esi, 1C0000h
		and	edi, esi
		mov	eax, _CMFFlagsCache
		and	eax, esi
		cmp	edi, eax
		jnz	short loc_A11079

loc_A11075:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+7AAj
		mov	esi, ebx
		jmp	short loc_A10FFA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11079:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+E6j
		call	_KeEnterCriticalRegion@0 ; KeEnterCriticalRegion()
		push	1
		push	_CMFLock
		call	ExAcquireResourceExclusiveLite
		mov	[ebp+ms_exc.disabled], ebx
		mov	eax, _CMFFlagsCache
		and	eax, esi
		cmp	edi, eax
		jz	loc_A111A3
		mov	ecx, _CMFDirectorySectionPointer
		test	ecx, ecx
		jz	short loc_A110E9
		test	edi, edi
		jnz	short loc_A110B5
		mov	esi, 0C00000BBh
		jmp	loc_A111A5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A110B5:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+11Cj
		test	ecx, ecx
		jz	short loc_A110E9
		mov	edx, 80000000h
		mov	[ebp+var_68], edx
		test	eax, eax
		jz	short loc_A110CD
		mov	edx, 0C0000000h
		mov	[ebp+var_68], edx

loc_A110CD:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+136j
		push	[ebp+var_5C]
		call	_CMFCheckAccess@12 ; CMFCheckAccess(x,x,x)
		mov	esi, eax
		mov	[ebp+var_1C], esi
		mov	ecx, 0C0000000h
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A111A8

loc_A110E9:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+118j
					; NtMapCMFModule(x,x,x,x,x,x)+12Aj
		mov	eax, _CMFFlagsCache
		and	eax, 0FFE3FFFFh
		mov	_CMFFlagsCache,	eax
		or	eax, edi
		mov	_CMFFlagsCache,	eax
		mov	ecx, _CMFDirectorySectionPointer
		test	ecx, ecx
		jz	loc_A111A3
		test	eax, 180000h
		jz	loc_A111A3
		mov	[ebp+var_24], ebx
		push	68h
		pop	esi
		mov	[ebp+var_2C], esi
		mov	[ebp+var_50], ebx
		mov	[ebp+var_4C], ebx
		lea	eax, [ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ecx
		call	_MmMapViewInSystemSpace@12 ; MmMapViewInSystemSpace(x,x,x)
		mov	[ebp+var_1C], eax
		test	eax, eax
		js	short loc_A1117D
		mov	edx, [ebp+var_24]
		test	edx, edx
		jz	short loc_A1117D
		cmp	[ebp+var_2C], esi
		jb	short loc_A11174
		and	dword ptr [edx+30h], 0FFE3FFFFh
		mov	ecx, _CMFFlagsCache
		and	ecx, 80000h
		neg	ecx
		sbb	ecx, ecx
		and	ecx, 0FFF80000h
		add	ecx, 100000h
		or	ecx, [edx+30h]
		mov	[edx+30h], ecx
		mov	edx, [ebp+var_24]

loc_A11174:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+1B9j
		push	edx
		call	_MmUnmapViewInSystemSpace@4 ; MmUnmapViewInSystemSpace(x)
		mov	[ebp+var_24], ebx

loc_A1117D:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+1ADj
					; NtMapCMFModule(x,x,x,x,x,x)+1B4j
		mov	ecx, _CMFFlagsCache
		and	ecx, 100000h
		neg	ecx
		sbb	ecx, ecx
		and	ecx, 110h
		add	ecx, 20h
		call	_CMFUnmapModules@4 ; CMFUnmapModules(x)
		push	4
		pop	ecx
		call	_CMFRegisterEventTime@4	; CMFRegisterEventTime(x)

loc_A111A3:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+10Aj
					; NtMapCMFModule(x,x,x,x,x,x)+17Aj ...
		mov	esi, ebx

loc_A111A5:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+123j
		mov	[ebp+var_1C], esi

loc_A111A8:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+156j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_A111BC
		jmp	loc_A11770
_NtMapCMFModule@24 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A111B9	proc near		; DATA XREF: .text:006AAA40o
		mov	esi, [ebp-1Ch]
sub_A111B9	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A111BC	proc near		; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+222p
		mov	ecx, _CMFLock
		call	ExReleaseResourceLite
		call	_KeLeaveCriticalRegion@0 ; KeLeaveCriticalRegion()
		retn
sub_A111BC	endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
; START	OF FUNCTION CHUNK FOR _NtMapCMFModule@24

loc_A111CD:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+B5j
		call	_KeEnterCriticalRegion@0 ; KeEnterCriticalRegion()
		push	1
		push	_CMFLock
		call	ExAcquireResourceSharedLite
		xor	edx, edx
		inc	edx
		mov	[ebp+ms_exc.disabled], edx
		mov	eax, _CMFFlagsCache
		test	eax, eax
		jz	short loc_A11254
		mov	ecx, eax
		and	ecx, 0Fh
		jz	short loc_A111FF
		and	edi, 0FFFFFFF0h
		mov	[ebp+arg_0], edi
		or	edi, ecx
		jmp	short loc_A11201
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A111FF:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+266j
		or	edi, edx

loc_A11201:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+270j
		mov	[ebp+arg_0], edi
		test	eax, 100000h
		jz	short loc_A11228
		test	edi, 10000h
		jnz	short loc_A11220

loc_A11213:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+2B6j
		mov	esi, 0C0000098h

loc_A11218:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+34Aj
					; NtMapCMFModule(x,x,x,x,x,x)+3B7j ...
		mov	[ebp+var_1C], esi
		jmp	loc_A11693
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11220:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+284j
		or	edi, 100000h
		jmp	short loc_A11256
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11228:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+27Cj
		mov	ecx, 80000h
		test	eax, ecx
		jz	short loc_A11249
		mov	eax, edi
		and	eax, 130h
		cmp	eax, 20h
		jnz	short loc_A11245
		test	edi, 10000h
		jz	short loc_A11213

loc_A11245:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+2AEj
					; NtMapCMFModule(x,x,x,x,x,x)+2C5j
		or	edi, ecx
		jmp	short loc_A11256
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11249:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+2A2j
		mov	ecx, 40000h
		test	eax, ecx
		jz	short loc_A11259
		jmp	short loc_A11245
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11254:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+25Fj
		or	edi, edx

loc_A11256:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+299j
					; NtMapCMFModule(x,x,x,x,x,x)+2BAj
		mov	[ebp+arg_0], edi

loc_A11259:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+2C3j
		mov	ecx, edi
		and	ecx, 0FFFFFECFh
		mov	[ebp+var_54], ecx
		mov	[ebp+var_3C], ecx
		and	edi, 130h
		mov	[ebp+arg_0], edi
		mov	eax, ecx
		and	eax, 40h
		push	0
		pop	edx
		setnz	dl
		lea	edx, ds:2[edx*2]
		mov	[ebp+var_34], edx
		neg	eax
		sbb	eax, eax
		and	eax, 40000000h
		add	eax, 80000000h
		mov	[ebp+var_40], eax
		mov	edx, 2710h
		mov	[ebp+var_30], edx
		mov	[ebp+var_1D], bl
		cmp	edi, 10h
		jnz	loc_A11349
		mov	eax, _CMFCacheIndex
		mov	[ebp+var_38], eax
		cmp	eax, edx
		jb	short loc_A112E2
		cmp	[ebp+arg_4], edx
		jb	short loc_A112DC
		cmp	_CMFFirstAccess, 0
		jz	short loc_A112D2
		xor	ecx, ecx
		inc	ecx
		call	_CMFRegisterEventTime@4	; CMFRegisterEventTime(x)
		mov	_CMFFirstAccess, bl

loc_A112D2:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+335j
					; NtMapCMFModule(x,x,x,x,x,x)+3C9j ...
		mov	esi, 0C000000Dh
		jmp	loc_A11218
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A112DC:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+32Cj
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_38], eax

loc_A112E2:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+327j
		mov	[ebp+var_30], eax
		test	cl, 2
		jz	short loc_A112EE
		mov	[ebp+var_1D], 1

loc_A112EE:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+35Bj
		mov	eax, offset _CMFDirectorySectionPointer

loc_A112F3:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+452j
		mov	[ebp+var_28], eax
		mov	eax, [eax]

loc_A112F8:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+485j
		mov	ecx, [ebp+var_28]

loc_A112FB:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+4AFj
		test	eax, eax
		jnz	loc_A11574
		mov	ecx, _CMFLock
		call	ExReleaseResourceLite
		push	1
		push	_CMFLock
		call	ExAcquireResourceExclusiveLite
		mov	ecx, _CMFFlagsCache
		mov	eax, ecx
		mov	edx, [ebp+var_54]
		xor	eax, edx
		test	eax, 1C0000h
		jz	loc_A11441
		test	ecx, 180000h
		jz	loc_A11441

loc_A1133F:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+5A7j
		mov	esi, 0C0000001h
		jmp	loc_A11218
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11349:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+317j
		cmp	edi, 20h
		jnz	loc_A113E4
		cmp	[ebp+arg_4], 1Eh
		jnb	loc_A112D2
		mov	eax, _CMFCacheIndex
		mov	[ebp+var_38], eax
		cmp	eax, edx
		jz	loc_A112D2
		mov	[ebp+var_30], eax
		cmp	_CMFSegmentSectionPointer, 0
		jnz	short loc_A113CA
		push	636D6650h
		push	78h
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	[ebp+var_24], eax
		test	eax, eax
		jnz	short loc_A11397
		mov	esi, 0C0000017h
		jmp	loc_A11218
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11397:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+3FEj
		push	78h		; size_t
		push	ebx		; int
		push	eax		; void *
		call	_memset
		add	esp, 0Ch
		mov	ecx, [ebp+var_24]
		mov	edx, offset _CMFSegmentSectionPointer
		xor	eax, eax
		lock cmpxchg [edx], ecx
		mov	[ebp+var_B4], eax
		test	eax, eax
		jz	short loc_A113C4
		push	ebx
		push	[ebp+var_24]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A113C4:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+42Cj
		mov	[ebp+var_24], ebx
		mov	ecx, [ebp+var_54]

loc_A113CA:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+3E9j
		test	cl, 4
		jz	short loc_A113D3
		mov	[ebp+var_1D], 1

loc_A113D3:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+440j
		mov	ecx, _CMFSegmentSectionPointer
		mov	eax, [ebp+arg_4]
		lea	eax, [ecx+eax*4]
		jmp	loc_A112F3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A113E4:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+3BFj
		cmp	edi, 100h
		jnz	loc_A112D2
		mov	eax, _CMFCacheIndex
		mov	[ebp+var_38], eax
		mov	[ebp+var_30], eax
		test	cl, 8
		jz	short loc_A11404
		mov	[ebp+var_1D], 1

loc_A11404:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+471j
		mov	[ebp+var_28], offset _CMFHitsSectionPointer
		mov	eax, _CMFHitsSectionPointer
		test	eax, eax
		jnz	loc_A112F8
		mov	[ebp+var_64], ebx
		mov	[ebp+var_60], ebx
		lea	eax, [ebp+var_64]
		push	eax
		call	KeQuerySystemTime
		mov	eax, [ebp+var_64]
		mov	_CMFHitsLastFlushTime, eax
		mov	eax, [ebp+var_60]
		mov	dword_701314, eax
		mov	ecx, [ebp+var_28]
		mov	eax, [ecx]
		jmp	loc_A112FB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11441:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+3A0j
					; NtMapCMFModule(x,x,x,x,x,x)+3ACj
		mov	ecx, [ebp+var_28]
		cmp	[ecx], ebx
		jnz	loc_A11566
		mov	[ebp+var_98], 8000000h
		mov	eax, [ebp+var_38]
		mov	[ebp+var_94], eax
		mov	eax, [ebp+var_40]
		mov	[ebp+var_90], eax
		mov	al, [ebp+var_1D]
		mov	[ebp+var_8C], al
		mov	[ebp+var_88], ebx
		mov	[ebp+var_84], edx
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_80], eax
		mov	eax, [ebp+var_34]
		mov	[ebp+var_7C], eax
		mov	[ebp+var_74], ecx
		mov	[ebp+var_70], edi
		push	ebx
		push	1
		lea	eax, [ebp+var_C8]
		push	eax
		call	_KeInitializeEvent@12 ;	KeInitializeEvent(x,x,x)
		lea	eax, [ebp+var_C8]
		mov	[ebp+var_88], eax
		mov	[ebp+var_B0], 18h
		mov	[ebp+var_AC], ebx
		mov	[ebp+var_A4], 200h
		mov	[ebp+var_A8], ebx
		mov	[ebp+var_A0], ebx
		mov	[ebp+var_9C], ebx
		lea	eax, [ebp+var_98]
		push	eax
		push	offset _CMFSystemThreadRoutine@4 ; CMFSystemThreadRoutine(x)
		push	ebx
		push	ebx
		lea	eax, [ebp+var_B0]
		push	eax
		push	1FFFFFh
		lea	eax, [ebp+var_58]
		push	eax
		call	_PsCreateSystemThread@28 ; PsCreateSystemThread(x,x,x,x,x,x,x)
		mov	esi, eax
		mov	[ebp+var_1C], esi
		mov	ecx, 0C0000000h
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A11693
		push	[ebp+var_58]
		call	_ZwClose@4	; ZwClose(x)
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_C8]
		push	eax
		call	KeWaitForSingleObject
		mov	esi, eax
		mov	[ebp+var_1C], esi
		test	esi, esi
		jz	short loc_A11539
		js	loc_A11693
		jmp	loc_A1133F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11539:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+59Fj
		mov	eax, [ebp+var_84]
		mov	[ebp+var_3C], eax
		mov	esi, [ebp+var_78]
		mov	[ebp+var_1C], esi
		mov	eax, esi
		mov	ecx, 0C0000000h
		and	eax, ecx
		cmp	eax, ecx
		jz	loc_A11693
		cmp	edi, 10h
		jnz	short loc_A11566
		push	2
		pop	ecx
		call	_CMFRegisterEventTime@4	; CMFRegisterEventTime(x)

loc_A11566:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+4B9j
					; NtMapCMFModule(x,x,x,x,x,x)+5CFj
		push	_CMFLock
		call	ExConvertExclusiveToSharedLite
		mov	ecx, [ebp+var_28]

loc_A11574:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+370j
		mov	[ebp+var_24], ebx
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_50], ebx
		mov	[ebp+var_4C], ebx
		cmp	[ebp+arg_14], 0
		jz	loc_A11693
		cmp	edi, 100h
		jz	short loc_A115B4
		push	[ebp+var_5C]
		mov	edx, [ebp+var_40]
		mov	ecx, [ecx]
		call	_CMFCheckAccess@12 ; CMFCheckAccess(x,x,x)
		mov	esi, eax
		mov	[ebp+var_1C], esi
		and	eax, 0C0000000h
		cmp	eax, 0C0000000h
		jz	loc_A11693

loc_A115B4:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+603j
		mov	eax, large fs:124h
		mov	[ebp+var_B8], eax
		mov	eax, [eax+80h]
		push	[ebp+var_34]
		push	400000h
		push	1
		lea	ecx, [ebp+var_2C]
		push	ecx
		lea	ecx, [ebp+var_50]
		push	ecx
		push	ebx
		push	ebx
		lea	ecx, [ebp+var_24]
		push	ecx
		push	eax
		mov	eax, [ebp+var_28]
		push	dword ptr [eax]
		call	MmMapViewOfSection
		mov	esi, eax
		mov	[ebp+var_1C], esi
		and	eax, 0C0000000h
		cmp	eax, 0C0000000h
		jnz	short loc_A11602
		mov	[ebp+var_24], ebx
		jmp	loc_A11693
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11602:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+66Bj
		cmp	[ebp+arg_0], 100h
		jnz	loc_A11693
		mov	[ebp+var_48], ebx
		mov	[ebp+var_44], ebx
		mov	eax, _CMFHitsLastFlushTime
		mov	[ebp+arg_4], eax
		mov	edi, dword_701314
		mov	[ebp+var_40], edi
		lea	eax, [ebp+var_48]
		push	eax
		call	KeQuerySystemTime
		mov	edx, [ebp+arg_4]
		mov	ecx, edx
		add	ecx, 61C46800h
		mov	eax, edi
		adc	eax, 8
		cmp	[ebp+var_44], eax
		jl	short loc_A11693
		jg	short loc_A1164B
		cmp	[ebp+var_48], ecx
		jbe	short loc_A11693

loc_A1164B:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+6B7j
		mov	eax, edx
		mov	edx, edi
		mov	[ebp+var_34], offset _CMFHitsLastFlushTime
		nop
		mov	ebx, [ebp+var_48]
		mov	ecx, [ebp+var_44]
		mov	edi, [ebp+var_34]
		lock cmpxchg8b qword ptr [edi]
		mov	ebx, [ebp+arg_4]
		cmp	ebx, eax
		mov	edi, [ebp+var_40]
		jnz	short loc_A11691
		cmp	edi, edx
		jnz	short loc_A11691
		mov	edx, [ebp+var_2C]
		mov	ecx, [ebp+var_24]
		call	_CMFFlushHitsFile@8 ; CMFFlushHitsFile(x,x)
		test	eax, eax
		jns	short loc_A11691
		mov	eax, [ebp+var_48]
		mov	edx, [ebp+var_44]
		nop
		mov	ecx, edi
		mov	edi, [ebp+var_34]
		lock cmpxchg8b qword ptr [edi]

loc_A11691:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+6DFj
					; NtMapCMFModule(x,x,x,x,x,x)+6E3j ...
		xor	ebx, ebx

loc_A11693:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+28Ej
					; NtMapCMFModule(x,x,x,x,x,x)+57Aj ...
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		call	sub_A11741
		mov	eax, esi
		and	eax, 0C0000000h
		cmp	eax, 0C0000000h
		jz	loc_A11770
		mov	[ebp+ms_exc.disabled], 2
		mov	ecx, [ebp+arg_14]
		test	ecx, ecx
		jz	short loc_A116D9
		mov	eax, ds:_MmUserProbeAddress
		cmp	ecx, eax
		jb	short loc_A116CA
		mov	ecx, eax

loc_A116CA:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+739j
		mov	eax, [ecx]
		mov	[ecx], eax
		mov	ecx, [ebp+var_24]
		mov	eax, [ebp+arg_14]
		mov	[eax], ecx
		mov	[ebp+var_24], ebx

loc_A116D9:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+730j
		mov	ecx, [ebp+arg_10]
		test	ecx, ecx
		jz	short loc_A116F6
		mov	edx, ecx
		mov	eax, ds:_MmUserProbeAddress
		cmp	ecx, eax
		jb	short loc_A116ED
		mov	edx, eax

loc_A116ED:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+75Cj
		mov	eax, [edx]
		mov	[edx], eax
		mov	eax, [ebp+var_2C]
		mov	[ecx], eax

loc_A116F6:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+751j
		mov	ecx, [ebp+arg_8]
		test	ecx, ecx
		jz	short loc_A11713
		mov	edx, ecx
		mov	eax, ds:_MmUserProbeAddress
		cmp	ecx, eax
		jb	short loc_A1170A
		mov	edx, eax

loc_A1170A:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+779j
		mov	eax, [edx]
		mov	[edx], eax
		mov	eax, [ebp+var_30]
		mov	[ecx], eax

loc_A11713:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+76Ej
		mov	ecx, [ebp+arg_C]
		test	ecx, ecx
		jz	short loc_A11730
		mov	edx, ecx
		mov	eax, ds:_MmUserProbeAddress
		cmp	ecx, eax
		jb	short loc_A11727
		mov	edx, eax

loc_A11727:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+796j
		mov	eax, [edx]
		mov	[edx], eax
		mov	eax, [ebp+var_3C]
		mov	[ecx], eax

loc_A11730:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+78Bj
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	loc_A11075
; END OF FUNCTION CHUNK	FOR _NtMapCMFModule@24

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1173C	proc near		; DATA XREF: .text:006AAA4Co
		xor	ebx, ebx
		mov	esi, [ebp-1Ch]
sub_A1173C	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A11741	proc near		; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+70Dp
		mov	ecx, _CMFLock
		call	ExReleaseResourceLite
		call	_KeLeaveCriticalRegion@0 ; KeLeaveCriticalRegion()
		retn
sub_A11741	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A11752	proc near		; DATA XREF: .text:006AAA54o
		mov	eax, [ebp-14h]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp-6Ch], eax
		xor	eax, eax
		inc	eax
		retn
sub_A11752	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A11760	proc near		; DATA XREF: .text:006AAA58o
		mov	esp, [ebp-18h]
		mov	esi, [ebp-6Ch]
		mov	[ebp-1Ch], esi
		mov	dword ptr [ebp-4], 0FFFFFFFEh
sub_A11760	endp

; START	OF FUNCTION CHUNK FOR _NtMapCMFModule@24

loc_A11770:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+70j
					; NtMapCMFModule(x,x,x,x,x,x)+A9j ...
		cmp	[ebp+var_24], 0
		jz	short loc_A1178D
		push	[ebp+var_24]
		mov	eax, large fs:124h
		push	dword ptr [eax+80h]
		call	_MmUnmapViewOfSection@8	; MmUnmapViewOfSection(x,x)
		mov	esi, [ebp+var_1C]

loc_A1178D:				; CODE XREF: NtMapCMFModule(x,x,x,x,x,x)+7E7j
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	18h
; END OF FUNCTION CHUNK	FOR _NtMapCMFModule@24

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall NtPssCaptureVaSpaceBulk(x, x, x, x,	x)
_NtPssCaptureVaSpaceBulk@20 proc near	; DATA XREF: .text:005812D8o

var_80		= dword	ptr -80h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	70h
		push	offset dword_6AAA80
		call	__SEH_prolog4_GS
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_50], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_54], eax
		mov	esi, [ebp+arg_8]
		mov	[ebp+var_44], esi
		mov	[ebp+var_6C], esi
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_3C], eax
		mov	eax, [ebp+arg_10]
		mov	[ebp+var_64], eax
		xor	edx, edx
		mov	[ebp+var_58], edx
		push	6
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_34]
		rep stosd
		mov	[ebp+var_5C], edx
		mov	[ebp+var_4C], edx
		mov	[ebp+var_60], edx
		mov	[ebp+var_40], edx
		mov	ebx, edx
		mov	[ebp+var_38], ebx
		mov	ecx, [ebp+var_3C]
		cmp	ecx, 0Ch
		jnb	short loc_A11800
		mov	eax, 0C0000004h
		jmp	loc_A11AD8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11800:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+53j
		mov	eax, large fs:124h
		mov	[ebp+var_74], eax
		mov	al, [eax+15Ah]
		mov	byte ptr [ebp+var_48], al
		lea	edi, [ebp+var_80]
		test	al, al
		jz	short loc_A11884
		xor	eax, eax
		stosd
		stosd
		stosd
		mov	[ebp+ms_exc.disabled], edx
		push	4
		push	ecx
		push	esi
		call	_ProbeForWrite@12 ; ProbeForWrite(x,x,x)
		mov	ecx, [ebp+var_64]
		test	ecx, ecx
		jz	short loc_A11840
		mov	eax, ds:_MmUserProbeAddress
		cmp	ecx, eax
		jb	short loc_A1183C
		mov	ecx, eax

loc_A1183C:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+97j
		mov	eax, [ecx]
		mov	[ecx], eax

loc_A11840:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+8Ej
		lea	edi, [ebp+var_80]
		movsd
		movsd
		movsd
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	edi, [ebp+var_44]
		jmp	short loc_A11876
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11852:				; DATA XREF: .text:006AAA94o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_68], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11860:				; DATA XREF: .text:006AAA98o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	ebx, [ebp+var_68]
		mov	[ebp+var_38], ebx
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	edi, [ebp+var_6C]
		mov	[ebp+var_44], edi

loc_A11876:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+AFj
		mov	ecx, [ebp+var_3C]
		xor	edx, edx
		test	ebx, ebx
		jns	short loc_A1188A
		jmp	loc_A11AD6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11884:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+76j
		movsd
		movsd
		movsd
		mov	edi, [ebp+var_44]

loc_A1188A:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+DCj
		cmp	[ebp+var_80], 0
		jnz	short loc_A1189D
		mov	ebx, 0C000000Dh

loc_A11895:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+10Aj
					; NtPssCaptureVaSpaceBulk(x,x,x,x,x)+11Cj ...
		mov	esi, [ebp+var_40]
		jmp	loc_A11A6F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1189D:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+EDj
		test	[ebp+var_80], 0FFFFFFFCh
		jz	short loc_A118AD
		mov	ebx, 0C00000BBh
		jmp	short loc_A11895
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A118AD:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+103j
		mov	eax, [ebp+var_54]
		cmp	eax, ds:_MmHighestUserAddress
		jbe	short loc_A118BF
		mov	ebx, 0C0000141h
		jmp	short loc_A11895
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A118BF:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+115j
		cmp	byte ptr [ebp+var_48], 0
		jz	loc_A1195A
		push	edx
		push	edx
		push	edx
		push	ecx
		push	edi
		call	IoAllocateMdl
		mov	esi, eax
		mov	[ebp+var_40], esi
		test	esi, esi
		jnz	short loc_A118E3
		mov	ebx, 0C000009Ah
		jmp	short loc_A11895
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A118E3:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+139j
		xor	eax, eax
		inc	eax
		mov	[ebp+ms_exc.disabled], eax
		push	eax
		xor	edi, edi
		push	edi
		push	esi
		call	_MmProbeAndLockPages@12	; MmProbeAndLockPages(x,x,x)
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		test	byte ptr [esi+6], 5
		jz	short loc_A11908
		mov	edi, [esi+0Ch]
		mov	[ebp+var_44], edi
		jmp	short loc_A1191D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11908:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+15Dj
		push	40000010h
		push	edi
		push	edi
		push	1
		push	edi
		push	esi
		call	MmMapLockedPagesSpecifyCache
		mov	edi, eax
		mov	[ebp+var_44], eax

loc_A1191D:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+165j
		mov	esi, [ebp+var_40]
		test	edi, edi
		jnz	short loc_A1195E
		mov	ebx, 0C000009Ah
		jmp	loc_A11A6F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1192E:				; DATA XREF: .text:006AAAA0o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_70], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1193C:				; DATA XREF: .text:006AAAA4o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_40]
		push	esi
		call	_IoFreeMdl@4	; IoFreeMdl(x)
		mov	ebx, [ebp+var_70]
		mov	[ebp+var_38], ebx
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	loc_A11A72
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1195A:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+122j
		mov	esi, edx
		jmp	short loc_A11960
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1195E:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+181j
		xor	edx, edx

loc_A11960:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+1BBj
		cmp	[ebp+var_50], 0FFFFFFFFh
		jz	short loc_A119C8
		push	edx
		lea	eax, [ebp+var_58]
		push	eax
		push	41737350h
		push	[ebp+var_48]
		push	ds:_PsProcessType
		push	1000h
		push	[ebp+var_50]
		call	_ObReferenceObjectByHandleWithTag@28 ; ObReferenceObjectByHandleWithTag(x,x,x,x,x,x,x)
		mov	ebx, eax
		mov	[ebp+var_38], ebx
		test	ebx, ebx
		js	loc_A11A72
		mov	ecx, [ebp+var_58]
		test	dword ptr [ecx+3A8h], 1000h
		jz	short loc_A119B6
		mov	edx, 41737350h
		call	ObfDereferenceObjectWithTag
		mov	ebx, 0C0000022h
		jmp	loc_A11A6F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A119B6:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+1FFj
		lea	eax, [ebp+var_34]
		push	eax
		xor	edx, edx
		call	KiStackAttachProcess
		mov	[ebp+var_60], 1

loc_A119C8:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+1C3j
		cmp	byte ptr [ebp+var_48], 0
		jz	short loc_A119E8
		lea	eax, [ebp+var_4C]
		push	eax
		mov	eax, [ebp+var_3C]
		push	eax
		push	edi
		push	[ebp+var_54]
		push	0FFFFFFFFh
		call	_ZwPssCaptureVaSpaceBulk@20 ; ZwPssCaptureVaSpaceBulk(x,x,x,x,x)
		mov	ebx, eax
		jmp	loc_A11A6F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A119E8:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+22Bj
		xor	edi, edi
		mov	ecx, [ebp+var_44]
		mov	[ecx+4], edi
		mov	[ebp+var_4C], 0Ch
		add	[ebp+var_3C], 0FFFFFFF4h
		lea	edx, [ecx+0Ch]
		mov	eax, [ebp+var_54]
		jmp	short loc_A11A4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11A03:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+2B8j
		mov	eax, [ebp+var_74]
		mov	eax, [eax+2FCh]
		test	al, 1
		jnz	loc_A11ABE
		push	2
		lea	eax, [ebp+var_5C]
		push	eax
		push	1Ch
		push	edx
		push	edi
		mov	edx, [ebp+var_50]
		or	ecx, 0FFFFFFFFh
		call	MmQueryVirtualMemory
		mov	ebx, eax
		mov	[ebp+var_38], ebx
		mov	ecx, [ebp+var_44]
		test	ebx, ebx
		js	short loc_A11AAE
		mov	eax, [ebp+var_5C]
		sub	[ebp+var_3C], eax
		add	[ebp+var_4C], eax
		mov	edx, [ebp+var_48]
		mov	eax, [edx+0Ch]
		add	eax, [edx]
		add	edx, 1Ch
		inc	dword ptr [ecx+4]
		mov	[ecx+8], eax

loc_A11A4F:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+260j
		cmp	[ebp+var_3C], 1Ch
		mov	[ebp+var_50], eax
		mov	[ebp+var_48], edx
		jnb	short loc_A11A03

loc_A11A5B:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+31Bj
		test	ebx, ebx
		js	short loc_A11A72
		mov	eax, ds:_MmHighestUserAddress
		inc	eax
		cmp	[ecx+8], eax
		jz	short loc_A11A72
		mov	ebx, 105h

loc_A11A6F:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+F7j
					; NtPssCaptureVaSpaceBulk(x,x,x,x,x)+188j ...
		mov	[ebp+var_38], ebx

loc_A11A72:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+1B4j
					; NtPssCaptureVaSpaceBulk(x,x,x,x,x)+1ECj ...
		cmp	[ebp+var_60], 0
		jz	short loc_A11A82
		xor	edx, edx
		lea	ecx, [ebp+var_34]
		call	_KiUnstackDetachProcess@8 ; KiUnstackDetachProcess(x,x)

loc_A11A82:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+2D5j
		test	esi, esi
		jz	short loc_A11A92
		push	esi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)
		push	esi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A11A92:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+2E3j
		mov	ecx, [ebp+var_64]
		test	ecx, ecx
		jz	short loc_A11AD6
		mov	[ebp+ms_exc.disabled], 2
		mov	eax, [ebp+var_4C]
		mov	[ecx], eax
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A11AD6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11AAE:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+292j
		xor	eax, eax
		cmp	eax, [ecx+4]
		sbb	eax, eax
		not	eax
		and	ebx, eax
		mov	[ebp+var_38], ebx
		jmp	short loc_A11A5B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11ABE:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+26Dj
		mov	ebx, 0C000004Bh
		jmp	short loc_A11A6F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11AC5:				; DATA XREF: .text:006AAAACo
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11AC9:				; DATA XREF: .text:006AAAB0o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	ebx, [ebp+var_38]

loc_A11AD6:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+DEj
					; NtPssCaptureVaSpaceBulk(x,x,x,x,x)+2F6j ...
		mov	eax, ebx

loc_A11AD8:				; CODE XREF: NtPssCaptureVaSpaceBulk(x,x,x,x,x)+5Aj
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	14h
_NtPssCaptureVaSpaceBulk@20 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall NtDirectGraphicsCall(x, x, x, x, x)
_NtDirectGraphicsCall@20 proc near	; DATA XREF: .text:005812DCo
		mov	eax, 0C0000002h
		retn	14h
_NtDirectGraphicsCall@20 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall ExWnfCleanupServerSiloState(x)
_ExWnfCleanupServerSiloState@4 proc near ; CODE	XREF: PspDeleteServerSiloGlobals(x)+2Ap
		mov	edi, edi
		push	esi
		mov	esi, ecx
		cmp	dword ptr [esi], 0
		jz	short loc_A11B35
		mov	eax, large fs:124h
		dec	word ptr [eax+13Ch]
		nop
		mov	ecx, [esi]
		push	2
		pop	edx
		call	_ExpWnfDeleteScopeInstances@8 ;	ExpWnfDeleteScopeInstances(x,x)
		mov	ecx, [esi]
		xor	edx, edx
		call	_ExpWnfDeleteScopeInstances@8 ;	ExpWnfDeleteScopeInstances(x,x)
		push	20666E57h
		push	dword ptr [esi]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	ecx, large fs:124h
		call	_KiLeaveCriticalRegionUnsafe@4 ; KiLeaveCriticalRegionUnsafe(x)

loc_A11B35:				; CODE XREF: ExWnfCleanupServerSiloState(x)+8j
		cmp	dword ptr [esi+4], 0
		jz	short loc_A11B43
		push	dword ptr [esi+4]
		call	_ZwClose@4	; ZwClose(x)

loc_A11B43:				; CODE XREF: ExWnfCleanupServerSiloState(x)+47j
		cmp	dword ptr [esi+8], 0
		jz	short loc_A11B51
		push	dword ptr [esi+8]
		call	_ZwClose@4	; ZwClose(x)

loc_A11B51:				; CODE XREF: ExWnfCleanupServerSiloState(x)+55j
		pop	esi
		retn
_ExWnfCleanupServerSiloState@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall ExpWnfAllocateNextPersistentNameSequence(x,	x)
_ExpWnfAllocateNextPersistentNameSequence@8 proc near
					; CODE XREF: ExpWnfGenerateStateName+149AF5p

var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 5Ch
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+5Ch+var_4], eax
		and	[esp+5Ch+var_30], 0
		xor	eax, eax
		and	[esp+5Ch+var_34], eax
		and	[esp+5Ch+var_40], eax
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		mov	[esp+68h+var_28], edx
		push	6
		pop	ecx
		lea	edi, [esp+68h+var_20]
		rep stosd
		xor	edi, edi
		push	esi
		mov	[esp+6Ch+var_50], edi
		call	_PsAttachSiloToCurrentThread@4 ; PsAttachSiloToCurrentThread(x)
		mov	[esp+68h+var_24], eax
		call	_PsGetCurrentServerSiloGlobals@0 ; PsGetCurrentServerSiloGlobals()
		add	eax, 208h
		mov	[esp+68h+var_44], eax
		lea	ecx, [eax+20h]
		mov	eax, [ecx]
		mov	[esp+68h+var_58], eax
		mov	eax, [ecx+4]
		mov	[esp+68h+var_3C], ecx
		mov	[esp+68h+var_54], eax
		cmp	[esp+68h+var_58], edi
		jnz	loc_A11D04
		test	eax, eax
		jnz	loc_A11D04
		xor	ecx, ecx
		lea	edx, [esp+68h+var_40]
		inc	ecx
		call	ExpWnfGetNameStoreRegistryRoot
		mov	edi, eax
		mov	[esp+68h+var_50], edi
		test	edi, edi
		js	loc_A11EBB
		mov	ebx, [esp+68h+var_44]
		xor	edx, edx
		add	ebx, 18h
		push	0
		mov	ecx, ebx
		call	KeAbPreAcquire
		mov	esi, eax
		lock bts dword ptr [ebx], 0
		jnb	short loc_A11C0D
		push	ebx
		mov	edx, esi
		mov	ecx, ebx
		call	ExfAcquirePushLockExclusiveEx

loc_A11C0D:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+AEj
		test	esi, esi
		jz	short loc_A11C15
		or	byte ptr [esi+0Eh], 1

loc_A11C15:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+BCj
		mov	ecx, [esp+68h+var_3C]
		mov	[esp+68h+var_34], 1
		mov	eax, [ecx]
		mov	ecx, [ecx+4]
		test	eax, eax
		jnz	loc_A11D04
		test	ecx, ecx
		jnz	loc_A11D04
		lea	eax, [esp+68h+var_30]
		push	eax
		push	18h
		lea	eax, [esp+70h+var_20]
		push	eax
		push	2
		push	offset _ExpWnfPermanentNameSequenceNumberValueName
		push	[esp+7Ch+var_40]
		call	_ZwQueryValueKey@24 ; ZwQueryValueKey(x,x,x,x,x,x)
		mov	edi, eax
		mov	[esp+68h+var_50], edi
		test	edi, edi
		js	loc_A11CF8
		cmp	[esp+68h+var_18], 8
		jz	short loc_A11C71
		mov	edi, 0C0000001h
		jmp	loc_A11E99
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11C71:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+112j
		mov	eax, [esp+68h+var_10]
		mov	ebx, [esp+68h+var_14]
		mov	[esp+68h+var_38], eax
		mov	[esp+68h+var_54], eax
		mov	eax, [esp+68h+var_44]
		add	eax, 10h
		mov	[esp+68h+var_5C], ebx
		mov	[esp+68h+var_58], ebx
		mov	[esp+68h+var_4C], eax

loc_A11C94:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+163j
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+169j
		mov	esi, [eax]
		mov	ecx, [eax+4]
		mov	eax, esi
		mov	[esp+68h+var_48], ecx
		mov	edx, ecx
		nop
		mov	ecx, [esp+68h+var_38]
		mov	edi, [esp+68h+var_4C]
		lock cmpxchg8b qword ptr [edi]
		mov	ebx, [esp+68h+var_5C]
		cmp	eax, esi
		mov	eax, edi
		jnz	short loc_A11C94
		cmp	edx, [esp+68h+var_48]
		jnz	short loc_A11C94
		mov	ebx, [esp+68h+var_58]
		mov	eax, [esp+68h+var_54]
		mov	edi, [esp+68h+var_3C]
		mov	[esp+68h+var_5C], ebx
		mov	[esp+68h+var_48], eax

loc_A11CD2:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+19Bj
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+1A1j
		mov	esi, [edi]
		mov	eax, esi
		mov	ecx, [edi+4]
		mov	edx, ecx
		mov	[esp+68h+var_38], ecx
		nop
		mov	ecx, [esp+68h+var_48]
		lock cmpxchg8b qword ptr [edi]
		mov	ebx, [esp+68h+var_5C]
		cmp	eax, esi
		jnz	short loc_A11CD2
		cmp	edx, [esp+68h+var_38]
		jnz	short loc_A11CD2
		jmp	short loc_A11D04
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11CF8:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+107j
		cmp	edi, 0C0000034h
		jnz	loc_A11E99

loc_A11D04:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+6Dj
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+75j ...
		mov	edi, [esp+68h+var_44]
		add	edi, 10h

loc_A11D0B:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+1D8j
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+1DCj ...
		mov	eax, [edi]
		mov	ebx, eax
		mov	esi, [edi+4]
		add	ebx, 1
		mov	ecx, esi
		mov	[esp+68h+var_4C], eax
		adc	ecx, 0
		mov	edx, esi
		nop
		lock cmpxchg8b qword ptr [edi]
		mov	ebx, [esp+68h+var_4C]
		cmp	eax, ebx
		jnz	short loc_A11D0B
		cmp	edx, esi
		jnz	short loc_A11D0B
		add	ebx, 1
		mov	[esp+68h+var_4C], ebx
		adc	esi, 0
		mov	[esp+68h+var_2C], esi
		test	ebx, ebx
		jnz	short loc_A11D47
		test	esi, esi
		jz	short loc_A11D0B

loc_A11D47:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+1EEj
		mov	ecx, [esp+68h+var_3C]
		mov	edi, [esp+68h+var_50]
		mov	eax, [ecx]
		mov	[esp+68h+var_58], eax
		mov	eax, [ecx+4]
		mov	[esp+68h+var_54], eax
		cmp	esi, eax
		jb	loc_A11E89
		ja	short loc_A11D70
		cmp	ebx, [esp+68h+var_58]
		jbe	loc_A11E89

loc_A11D70:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+211j
		cmp	[esp+68h+var_40], 0
		jnz	short loc_A11D8D
		xor	ecx, ecx
		lea	edx, [esp+68h+var_40]
		inc	ecx
		call	ExpWnfGetNameStoreRegistryRoot
		mov	edi, eax
		test	edi, edi
		js	loc_A11E92

loc_A11D8D:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+222j
		cmp	[esp+68h+var_34], 0
		jnz	short loc_A11DD2
		mov	ecx, [esp+68h+var_44]
		xor	edx, edx
		add	ecx, 18h
		push	0
		call	KeAbPreAcquire
		mov	ecx, [esp+68h+var_44]
		mov	[esp+68h+var_48], eax
		add	ecx, 18h
		lock bts dword ptr [ecx], 0
		jnb	short loc_A11DC2
		push	ecx
		mov	edx, eax
		call	ExfAcquirePushLockExclusiveEx
		mov	eax, [esp+68h+var_48]

loc_A11DC2:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+261j
		test	eax, eax
		jz	short loc_A11DCA
		or	byte ptr [eax+0Eh], 1

loc_A11DCA:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+271j
		mov	[esp+68h+var_34], 1

loc_A11DD2:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+23Fj
		mov	ecx, [esp+68h+var_3C]
		mov	edx, [ecx]
		mov	eax, [ecx+4]
		cmp	esi, eax
		jb	loc_A11E89
		ja	short loc_A11DED
		cmp	ebx, edx
		jbe	loc_A11E89

loc_A11DED:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+290j
		mov	eax, [ecx]
		mov	ecx, [ecx+4]
		add	eax, 64h
		mov	[esp+68h+var_58], eax
		adc	ecx, 0
		mov	[esp+68h+var_54], ecx
		cmp	ecx, esi
		ja	short loc_A11E22
		jb	short loc_A11E0A
		cmp	eax, ebx
		jnb	short loc_A11E22

loc_A11E0A:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+2B1j
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+2BFj ...
		add	eax, 64h
		adc	ecx, 0
		cmp	ecx, esi
		jb	short loc_A11E0A
		ja	short loc_A11E1A
		cmp	eax, ebx
		jb	short loc_A11E0A

loc_A11E1A:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+2C1j
		mov	[esp+68h+var_58], eax
		mov	[esp+68h+var_54], ecx

loc_A11E22:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+2AFj
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+2B5j
		push	8
		lea	eax, [esp+6Ch+var_58]
		push	eax
		push	3
		push	0
		push	offset _ExpWnfPermanentNameSequenceNumberValueName
		push	[esp+7Ch+var_40]
		call	_ZwSetValueKey@24 ; ZwSetValueKey(x,x,x,x,x,x)
		mov	edi, eax
		mov	[esp+68h+var_50], edi
		test	edi, edi
		js	short loc_A11E92
		mov	ebx, [esp+68h+var_58]
		mov	eax, [esp+68h+var_54]
		mov	edi, [esp+68h+var_3C]
		mov	[esp+68h+var_5C], ebx
		mov	[esp+68h+var_48], eax

loc_A11E59:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+322j
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+328j
		mov	esi, [edi]
		mov	eax, esi
		mov	ecx, [edi+4]
		mov	edx, ecx
		mov	[esp+68h+var_38], ecx
		nop
		mov	ecx, [esp+68h+var_48]
		lock cmpxchg8b qword ptr [edi]
		mov	ebx, [esp+68h+var_5C]
		cmp	eax, esi
		jnz	short loc_A11E59
		cmp	edx, [esp+68h+var_38]
		jnz	short loc_A11E59
		mov	edi, [esp+68h+var_50]
		mov	esi, [esp+68h+var_2C]
		mov	ebx, [esp+68h+var_4C]

loc_A11E89:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+20Bj
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+217j ...
		mov	eax, [esp+68h+var_28]
		mov	[eax], ebx
		mov	[eax+4], esi

loc_A11E92:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+234j
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+2F0j
		cmp	[esp+68h+var_34], 0
		jz	short loc_A11EBB

loc_A11E99:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+119j
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+1ABj
		mov	esi, [esp+68h+var_44]
		or	eax, 0FFFFFFFFh
		add	esi, 18h
		lock xadd [esi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A11EB4
		mov	ecx, esi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A11EB4:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+358j
		mov	ecx, esi
		call	KeAbPostRelease

loc_A11EBB:				; CODE XREF: ExpWnfAllocateNextPersistentNameSequence(x,x)+8Fj
					; ExpWnfAllocateNextPersistentNameSequence(x,x)+344j
		push	[esp+68h+var_24]
		call	_PsDetachSiloFromCurrentThread@4 ; PsDetachSiloFromCurrentThread(x)
		mov	ecx, [esp+68h+var_4]
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn
_ExpWnfAllocateNextPersistentNameSequence@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall ExpWnfDeletePermanentStateData(x, x, x)
_ExpWnfDeletePermanentStateData@12 proc	near ; CODE XREF: NtDeleteWnfStateName+14A27Cp
					; ExpNtDeleteWnfStateData+848A8p ...

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_C		= dword	ptr -0Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 3Ch
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+3Ch+var_4], eax
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		xor	ebx, ebx
		push	edi
		mov	edi, [ebp+arg_0]
		shrd	esi, eax, 4
		push	22h
		shrd	edi, eax, 6
		pop	eax
		push	[ebp+arg_4]
		mov	[esp+4Ch+var_30], ebx
		and	esi, 3
		push	[ebp+arg_0]
		mov	word ptr [esp+50h+var_30+2], ax
		and	edi, 0Fh
		mov	[esp+50h+var_34], ecx
		lea	eax, [esp+50h+var_28]
		lea	ecx, [esp+50h+var_30]
		mov	[esp+50h+var_38], ebx
		mov	[esp+50h+var_2C], eax
		call	_ExpWnfComposeValueName@12 ; ExpWnfComposeValueName(x,x,x)
		mov	eax, [esp+48h+var_34]
		mov	edx, esi
		test	eax, eax
		jz	short loc_A11F98
		lea	ecx, [esp+48h+var_38]
		push	ecx
		push	ebx
		mov	ecx, eax
		call	ExpWnfGetPermanentDataStoreHandle

loc_A11F4C:				; CODE XREF: ExpWnfDeletePermanentStateData(x,x,x)+CEj
		test	eax, eax
		js	short loc_A11F84

loc_A11F50:				; CODE XREF: ExpWnfDeletePermanentStateData(x,x,x)+A8j
		lea	eax, [esp+48h+var_30]
		push	eax
		push	[esp+4Ch+var_38]
		call	_ZwDeleteValueKey@8 ; ZwDeleteValueKey(x,x)
		cmp	[esp+48h+var_34], 0
		jnz	short loc_A11F84
		push	[esp+48h+var_38]
		call	_ZwClose@4	; ZwClose(x)
		lea	eax, [esp+48h+var_38]
		inc	ebx
		push	eax
		push	ebx
		mov	edx, esi
		mov	ecx, edi
		call	_ExpWnfEnumeratePermanentDataStores@16 ; ExpWnfEnumeratePermanentDataStores(x,x,x,x)
		test	eax, eax
		jns	short loc_A11F50
		xor	eax, eax

loc_A11F84:				; CODE XREF: ExpWnfDeletePermanentStateData(x,x,x)+76j
					; ExpWnfDeletePermanentStateData(x,x,x)+8Bj
		mov	ecx, [esp+50h+var_C]
		pop	edi
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn	8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A11F98:				; CODE XREF: ExpWnfDeletePermanentStateData(x,x,x)+65j
		lea	eax, [esp+48h+var_38]
		mov	ecx, edi
		push	eax
		push	0
		call	_ExpWnfEnumeratePermanentDataStores@16 ; ExpWnfEnumeratePermanentDataStores(x,x,x,x)
		jmp	short loc_A11F4C
_ExpWnfDeletePermanentStateData@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall ExpWnfDeleteScopeInstances(x, x)
_ExpWnfDeleteScopeInstances@8 proc near	; CODE XREF: ExWnfCleanupServerSiloState(x)+1Dp
					; ExWnfCleanupServerSiloState(x)+26p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, edx
		mov	[ebp+var_4], ecx
		push	ebx
		push	esi
		mov	[ebp+var_8], eax
		lea	esi, [ecx+14h]
		imul	eax, 0Ch
		xor	edx, edx
		push	edi
		lea	edi, [ecx+10h]
		push	0
		add	edi, eax
		add	esi, eax
		mov	ecx, edi
		call	KeAbPreAcquire
		mov	ebx, eax
		lock bts dword ptr [edi], 0
		jnb	short loc_A11FE6
		push	edi
		mov	edx, ebx
		mov	ecx, edi
		call	ExfAcquirePushLockExclusiveEx

loc_A11FE6:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+32j
		test	ebx, ebx
		jz	short loc_A11FEE
		or	byte ptr [ebx+0Eh], 1

loc_A11FEE:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+40j
		mov	eax, [esi]
		cmp	[eax+4], esi
		jnz	short loc_A12056
		mov	ecx, [eax]
		cmp	[ecx+4], eax
		jnz	short loc_A12056
		mov	[esi], ecx
		mov	[ecx+4], esi
		cmp	eax, esi
		jz	short loc_A12036
		mov	ebx, [ebp+var_4]

loc_A12008:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+8Cj
		and	dword ptr [eax], 0
		lea	ecx, [eax-14h]
		cmp	[ebp+var_8], 0
		jnz	short loc_A12018
		and	dword ptr [ebx+4], 0

loc_A12018:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+6Aj
		mov	dl, 1
		call	_ExpWnfFreeScopeInstance@8 ; ExpWnfFreeScopeInstance(x,x)
		mov	eax, [esi]
		cmp	[eax+4], esi
		jnz	short loc_A12056
		mov	ecx, [eax]
		cmp	[ecx+4], eax
		jnz	short loc_A12056
		mov	[esi], ecx
		mov	[ecx+4], esi
		cmp	eax, esi
		jnz	short loc_A12008

loc_A12036:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+5Bj
		or	eax, 0FFFFFFFFh
		lock xadd [edi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1204A
		mov	ecx, edi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1204A:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+99j
		mov	ecx, edi
		call	KeAbPostRelease
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12056:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+4Bj
					; ExpWnfDeleteScopeInstances(x,x)+52j ...
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
					; AL = character to display

; __stdcall ExpWnfEnumeratePermanentDataStores(x, x, x,	x)
_ExpWnfEnumeratePermanentDataStores@16:	; CODE XREF: ExpWnfDeletePermanentStateData(x,x,x)+A1p
					; ExpWnfDeletePermanentStateData(x,x,x)+C9p
		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	eax, ecx
		sub	eax, 0
		jz	short loc_A1206D
		dec	eax
		sub	eax, 1
		jz	short loc_A12073

loc_A1206D:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+BDj
		cmp	[ebp+arg_0], 0
		jz	short loc_A1207A

loc_A12073:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+C3j
		mov	eax, 0C0000034h
		jmp	short loc_A12099
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1207A:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+C9j
		cmp	edx, 3
		jz	short loc_A12088
		cmp	edx, 2
		jz	short loc_A12088
		xor	eax, eax
		jmp	short loc_A1208B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12088:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+D5j
					; ExpWnfDeleteScopeInstances(x,x)+DAj
		xor	eax, eax
		inc	eax

loc_A1208B:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+DEj
		push	[ebp+arg_4]
		push	0
		push	eax
		push	ecx
		push	0
		call	ExpWnfGetPermanentDataStoreHandleByScopeId

loc_A12099:				; CODE XREF: ExpWnfDeleteScopeInstances(x,x)+D0j
		pop	ebp
		retn	8
_ExpWnfDeleteScopeInstances@8 endp ; sp	= -1Ch


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall ExpWnfGetPermanentPerUserDataStoreHandle(x,	x)
_ExpWnfGetPermanentPerUserDataStoreHandle@8 proc near
					; CODE XREF: ExpWnfGetPermanentDataStoreHandleByScopeId+878AAp

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		mov	[ebp+var_10], edx
		push	6
		xor	eax, eax
		mov	[ebp+var_C], ebx
		and	[ebp+var_4], eax
		lea	edi, [ebp+var_30]
		pop	ecx
		rep stosd
		lea	edx, [ebp+var_4]
		mov	ecx, ebx
		call	_RtlLengthSidAsUnicodeString@8 ; RtlLengthSidAsUnicodeString(x,x)
		test	eax, eax
		js	loc_A12190
		mov	edi, [ebp+var_4]
		push	20666E57h
		lea	ebx, [edi+52h]
		push	ebx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A120F2
		mov	eax, 0C000009Ah
		jmp	loc_A12190
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A120F2:				; CODE XREF: ExpWnfGetPermanentPerUserDataStoreHandle(x,x)+49j
		and	[ebp+var_8], 0
		lea	eax, [ebp+var_8]
		push	offset ??_C@_1CA@DOEFBOAB@?$AA?2?$AAR?$AAe?$AAg?$AAi?$AAs?$AAt?$AAr?$AAy?$AA?2?$AAU?$AAs?$AAe?$AAr?$AA?2@NNGAKEGL@ ; "\\Registry\\User\\"
		push	eax		; int
		mov	word ptr [ebp+var_8+2],	bx
		mov	[ebp+var_4], esi
		call	_RtlAppendUnicodeToString@8 ; RtlAppendUnicodeToString(x,x)
		movzx	ecx, word ptr [ebp+var_8]
		xor	ebx, ebx
		mov	eax, [ebp+var_4]
		shr	ecx, 1
		push	ebx
		push	[ebp+var_C]
		mov	word ptr [ebp+var_18+2], di
		lea	eax, [eax+ecx*2]
		mov	[ebp+var_14], eax
		xor	eax, eax
		mov	word ptr [ebp+var_18], ax
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlConvertSidToUnicodeString
		mov	edi, eax
		test	edi, edi
		js	short loc_A12183
		mov	ax, word ptr [ebp+var_18]
		add	word ptr [ebp+var_8], ax
		lea	eax, [ebp+var_8]
		push	offset ??_C@_1DE@CEBLELHA@?$AA_?$AAC?$AAl?$AAa?$AAs?$AAs?$AAe?$AAs?$AA?2?$AAN?$AAo?$AAt?$AAi?$AAf?$AAi@NNGAKEGL@ ; void	*
		push	eax		; int
		call	_RtlAppendUnicodeToString@8 ; RtlAppendUnicodeToString(x,x)
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_8]
		mov	[ebp+var_30], 18h
		push	ebx
		mov	[ebp+var_28], eax
		lea	eax, [ebp+var_30]
		push	eax
		push	0F003Fh
		push	[ebp+var_10]
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_24], 240h
		mov	[ebp+var_20], ebx
		mov	[ebp+var_1C], ebx
		call	_ZwCreateKey@28	; ZwCreateKey(x,x,x,x,x,x,x)
		mov	edi, eax

loc_A12183:				; CODE XREF: ExpWnfGetPermanentPerUserDataStoreHandle(x,x)+9Aj
		push	20666E57h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	eax, edi

loc_A12190:				; CODE XREF: ExpWnfGetPermanentPerUserDataStoreHandle(x,x)+2Cj
					; ExpWnfGetPermanentPerUserDataStoreHandle(x,x)+50j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_ExpWnfGetPermanentPerUserDataStoreHandle@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	ExpWnfPopulateStateDataRemoteCallback(int,int,int,int,void *,int)
_ExpWnfPopulateStateDataRemoteCallback@24 proc near
					; DATA XREF: ExpWnfPopulateStateData+1478B7o

arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	edi
		mov	edi, [ebp+arg_C]
		test	edi, edi
		jnz	short loc_A121A6
		xor	eax, eax
		jmp	short loc_A1221E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A121A6:				; CODE XREF: ExpWnfPopulateStateDataRemoteCallback(x,x,x,x,x,x)+Bj
		mov	eax, [ebp+arg_4]
		push	ebx
		mov	ebx, [ebp+arg_14]
		test	ebx, ebx
		jnz	short loc_A121BF
		mov	dword ptr [eax+34h], 1
		mov	[eax+38h], edi
		xor	eax, eax
		jmp	short loc_A1221D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A121BF:				; CODE XREF: ExpWnfPopulateStateDataRemoteCallback(x,x,x,x,x,x)+1Aj
		mov	eax, [eax+24h]
		push	esi
		mov	[ebp+arg_C], eax
		add	eax, 10h
		push	20666E57h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A121E3
		mov	eax, 0C000009Ah
		jmp	short loc_A1221C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A121E3:				; CODE XREF: ExpWnfPopulateStateDataRemoteCallback(x,x,x,x,x,x)+45j
		push	10h
		mov	eax, 904h
		mov	[esi], ax
		pop	eax
		mov	[esi+2], ax
		mov	eax, [ebp+arg_C]
		push	ebx		; size_t
		push	[ebp+arg_10]	; void *
		mov	[esi+4], eax
		lea	eax, [esi+10h]
		push	eax		; void *
		mov	[esi+8], ebx
		mov	[esi+0Ch], edi
		call	_memcpy
		mov	ecx, [ebp+arg_4]
		add	esp, 0Ch
		mov	eax, [esi+0Ch]
		mov	[ecx+38h], eax
		xor	eax, eax
		mov	[ecx+34h], esi

loc_A1221C:				; CODE XREF: ExpWnfPopulateStateDataRemoteCallback(x,x,x,x,x,x)+4Cj
		pop	esi

loc_A1221D:				; CODE XREF: ExpWnfPopulateStateDataRemoteCallback(x,x,x,x,x,x)+28j
		pop	ebx

loc_A1221E:				; CODE XREF: ExpWnfPopulateStateDataRemoteCallback(x,x,x,x,x,x)+Fj
		pop	edi
		pop	ebp
		retn	18h
_ExpWnfPopulateStateDataRemoteCallback@24 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall ExpCrossVmWnfPush(x, x, x, x, x, x)
_ExpCrossVmWnfPush@24 proc near		; CODE XREF: ExpNtUpdateWnfStateData+149629p
					; ExpNtUpdateWnfStateData+1496DBp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, _ExpCrossVmIntExtensionHostGuest
		push	edi
		mov	edi, edx
		test	edi, edi
		jnz	short loc_A1223C
		mov	esi, _ExpCrossVmIntExtensionHostRoot

loc_A1223C:				; CODE XREF: ExpCrossVmWnfPush(x,x,x,x,x,x)+11j
		mov	ecx, esi
		call	_ExGetExtensionTable@4 ; ExGetExtensionTable(x)
		test	eax, eax
		jnz	short loc_A1224E
		mov	edi, 0C0000002h
		jmp	short loc_A12269
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1224E:				; CODE XREF: ExpCrossVmWnfPush(x,x,x,x,x,x)+22j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	edi
		push	0
		call	dword ptr [eax+38h]
		mov	edi, eax
		mov	ecx, esi
		call	_ExReleaseExtensionTable@4 ; ExReleaseExtensionTable(x)

loc_A12269:				; CODE XREF: ExpCrossVmWnfPush(x,x,x,x,x,x)+29j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebp
		retn	10h
_ExpCrossVmWnfPush@24 endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		align 4
		db 2 dup(0CCh)
; Exported entry 2626. WheaRemoveErrorSource

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheaRemoveErrorSource(x)
		public _WheaRemoveErrorSource@4
_WheaRemoveErrorSource@4 proc near	; CODE XREF: WheaRemoveErrorSourceDeviceDriver(x)+EFp

var_408		= dword	ptr -408h
var_404		= dword	ptr -404h
var_400		= dword	ptr -400h
var_3FC		= dword	ptr -3FCh
var_3F8		= dword	ptr -3F8h
var_3F4		= dword	ptr -3F4h
var_3F0		= dword	ptr -3F0h
var_3EC		= dword	ptr -3ECh
var_3E8		= dword	ptr -3E8h
var_3E4		= dword	ptr -3E4h
var_3E0		= dword	ptr -3E0h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 40Ch
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+40Ch+var_4], eax
		mov	edx, [ebp+arg_0]
		mov	ecx, offset _WheapErrorSourceTable
		push	ebx
		push	esi
		push	edi
		call	_WheapGetErrorSource@8 ; WheapGetErrorSource(x,x)
		mov	ebx, eax
		test	ebx, ebx
		jz	loc_A12394
		mov	ecx, [ebx+58h]
		call	WheapIsNonHestErrorSource
		test	al, al
		jz	loc_A12394
		mov	eax, [ebx+5Ch]
		cmp	eax, 3
		jz	loc_A12394
		push	4
		pop	edx
		cmp	eax, edx
		jz	loc_A12394
		or	[esp+418h+var_404], 0FFFFFFFFh
		lea	esi, [ebx+50h]
		mov	ecx, 0F3h
		mov	[esp+418h+var_408], 0FFFFFC18h
		lea	edi, [esp+418h+var_3E0]
		xor	eax, eax
		rep movsd
		mov	[ebx+5Ch], edx
		lea	esi, [ebx+4Ch]
		or	ecx, 0FFFFFFFFh
		lock cmpxchg [esi], ecx
		xor	edi, edi
		jmp	short loc_A12316
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12301:				; CODE XREF: WheaRemoveErrorSource(x)+A2j
		lea	eax, [esp+418h+var_408]
		push	eax
		push	edi
		push	edi
		call	_KeDelayExecutionThread@12 ; KeDelayExecutionThread(x,x,x)
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		lock cmpxchg [esi], ecx

loc_A12316:				; CODE XREF: WheaRemoveErrorSource(x)+89j
		test	eax, eax
		jg	short loc_A12301
		mov	ecx, ebx
		call	_WheapCallErrorSourceUninitialize@4 ; WheapCallErrorSourceUninitialize(x)
		mov	ecx, [ebx+24h]
		mov	esi, eax
		mov	dword ptr [ebx+5Ch], 3
		test	ecx, ecx
		jz	short loc_A1233F
		push	61656857h
		push	ecx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	[ebx+24h], edi

loc_A1233F:				; CODE XREF: WheaRemoveErrorSource(x)+B9j
		lea	eax, [esp+418h+var_400]
		mov	[esp+418h+var_400], 674C6857h
		push	eax
		mov	[esp+41Ch+var_3FC], 1
		mov	[esp+41Ch+var_3F8], 3F1h
		mov	[esp+41Ch+var_3F4], edi
		mov	[esp+41Ch+var_3EC], 8000000Ch
		mov	[esp+41Ch+var_3F0], 4C4E524Bh
		mov	[esp+41Ch+var_3E8], 2
		mov	[esp+41Ch+var_3E4], 3D1h
		mov	[esp+41Ch+var_14], esi
		mov	[esp+41Ch+var_10], 1
		call	WheaLogInternalEvent

loc_A12394:				; CODE XREF: WheaRemoveErrorSource(x)+30j
					; WheaRemoveErrorSource(x)+40j	...
		mov	ecx, [esp+418h+var_4]
		pop	edi
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn	4
_WheaRemoveErrorSource@4 endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		align 10h
; Exported entry 2627. WheaRemoveErrorSourceDeviceDriver

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheaRemoveErrorSourceDeviceDriver(x)
		public _WheaRemoveErrorSourceDeviceDriver@4
_WheaRemoveErrorSourceDeviceDriver@4 proc near

var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 4Ch
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+4Ch+var_4], eax
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		xor	esi, esi
		push	edi
		push	ebx
		mov	[esp+5Ch+var_28], esi
		mov	[esp+5Ch+var_24], esi
		mov	[esp+5Ch+var_20], esi
		mov	[esp+5Ch+var_1C], esi
		mov	[esp+5Ch+var_18], esi
		mov	[esp+5Ch+var_14], esi
		mov	[esp+5Ch+var_10], esi
		mov	[esp+5Ch+var_C], esi
		call	_WheaGetErrorSource@4 ;	WheaGetErrorSource(x)
		mov	edi, eax
		test	edi, edi
		jz	loc_A124B2
		or	edx, 0FFFFFFFFh
		lea	ecx, [edi+84h]
		xor	eax, eax
		lock cmpxchg [ecx], edx
		cmp	eax, 0FFFFFFFFh
		jz	loc_A124B2
		test	eax, eax
		jz	short loc_A12473
		push	20h
		xor	eax, eax
		mov	[esp+5Ch+var_48], 674C6857h
		pop	edx
		inc	eax
		mov	[esp+58h+var_40], 40h
		push	offset ??_C@_0BO@GODKNNIN@RemoveErrorSourceDeviceDriver@NNGAKEGL@ ; "RemoveErrorSourceDeviceDriver"
		lea	ecx, [esp+5Ch+var_28]
		mov	[esp+5Ch+var_44], eax
		mov	[esp+5Ch+var_3C], eax
		mov	[esp+5Ch+var_34], 8000002Ch
		mov	[esp+5Ch+var_38], 4C4E524Bh
		mov	[esp+5Ch+var_30], 2
		mov	[esp+5Ch+var_2C], edx
		call	_RtlStringCchCopyA@12 ;	RtlStringCchCopyA(x,x,x)
		lea	eax, [esp+58h+var_48]
		push	eax
		call	WheaLogInternalEvent
		mov	esi, 0C0000708h
		jmp	short loc_A124B2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12473:				; CODE XREF: WheaRemoveErrorSourceDeviceDriver(x)+68j
		mov	eax, [edi+48h]
		test	eax, eax
		jz	short loc_A1249E
		push	41454857h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		push	41454857h
		push	dword ptr [edi+80h]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	[edi+48h], esi
		mov	[edi+80h], esi

loc_A1249E:				; CODE XREF: WheaRemoveErrorSourceDeviceDriver(x)+C8j
		push	ebx
		call	_WheaRemoveErrorSource@4 ; WheaRemoveErrorSource(x)
		mov	dword ptr [edi+4Ch], offset _xKdGetAcpiTablePhase0@8 ; xKdGetAcpiTablePhase0(x,x)
		mov	dword ptr [edi+50h], offset _KeSetDmaIoCoherency@4 ; KeSetDmaIoCoherency(x)

loc_A124B2:				; CODE XREF: WheaRemoveErrorSourceDeviceDriver(x)+48j
					; WheaRemoveErrorSourceDeviceDriver(x)+60j ...
		mov	ecx, [esp+58h+var_4]
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn	4
_WheaRemoveErrorSourceDeviceDriver@4 endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		dd 0CCCCCCCCh
		db 0CCh
; Exported entry 2630. WheaReportHwErrorDeviceDriver

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	WheaReportHwErrorDeviceDriver(int,int,void *,size_t,int,int,int)
		public _WheaReportHwErrorDeviceDriver@28
_WheaReportHwErrorDeviceDriver@28 proc near

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	[ebp+arg_18]	; int
		xor	eax, eax
		push	[ebp+arg_14]	; int
		push	eax		; int
		push	[ebp+arg_10]	; int
		push	eax		; size_t
		push	eax		; void *
		push	[ebp+arg_C]	; size_t
		push	[ebp+arg_8]	; void *
		push	[ebp+arg_4]	; int
		push	[ebp+arg_0]	; int
		call	_WheaReportHwErrorDeviceDriverEx@40 ; WheaReportHwErrorDeviceDriverEx(x,x,x,x,x,x,x,x,x,x)
		pop	ebp
		retn	1Ch
_WheaReportHwErrorDeviceDriver@28 endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		align 4
		db 2 dup(0CCh)
; Exported entry 2610. WheaAttemptClearPoison

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheaAttemptClearPoison(x, x, x)
		public _WheaAttemptClearPoison@12
_WheaAttemptClearPoison@12 proc	near

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_1B		= word ptr -1Bh
var_19		= dword	ptr -19h
var_14		= dword	ptr -14h
var_D		= dword	ptr -0Dh
var_9		= dword	ptr -9
var_5		= dword	ptr -5
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= byte ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 38h
		mov	edx, [ebp+arg_0]
		mov	ecx, edx
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		xor	ebx, ebx
		mov	eax, esi
		mov	[esp+40h+var_34], ebx
		shrd	ecx, eax, 0Ch
		mov	eax, large fs:124h
		cmp	byte ptr [eax+15Ah], 1
		jnz	short loc_A125A0
		mov	al, [ebp+arg_8]
		push	ebx
		mov	[esp+44h+var_1C], al
		lea	eax, [esp+44h+var_14]
		push	ebx
		push	eax
		mov	[esp+4Ch+var_19], ebx
		mov	[esp+37h], ebx
		mov	[esp+4Ch+var_14+3], ebx
		mov	[esp+4Ch+var_D], ebx
		mov	[esp+4Ch+var_9], ebx
		mov	[esp+4Ch+var_5], ebx
		mov	[esp+4Ch+var_1], bl
		mov	[esp+4Ch+var_28], edx
		mov	[esp+4Ch+var_24], esi
		mov	[esp+4Ch+var_20], ecx
		mov	[esp+4Ch+var_1B], 101h
		call	_KeInitializeEvent@12 ;	KeInitializeEvent(x,x,x)
		lea	eax, [esp+40h+var_28]
		mov	[esp+40h+var_30], offset _WheapAttemptPhysicalPageOfflineWorker@4 ; WheapAttemptPhysicalPageOfflineWorker(x)
		mov	[esp+40h+var_2C], eax
		lea	eax, [esp+40h+var_38]
		push	1
		push	eax
		mov	[esp+48h+var_38], ebx
		call	ExQueueWorkItem
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [esp+50h+var_14]
		push	eax
		call	KeWaitForSingleObject
		mov	eax, [esp+40h+var_19+1]
		jmp	short loc_A125AD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A125A0:				; CODE XREF: WheaAttemptClearPoison(x,x,x)+2Ej
		push	esi
		push	edx
		mov	dl, [ebp+arg_8]
		push	ecx
		push	1
		call	_WheapAttemptPhysicalPageOffline@24 ; WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)

loc_A125AD:				; CODE XREF: WheaAttemptClearPoison(x,x,x)+A4j
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
_WheaAttemptClearPoison@12 endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		align 4
		db 2 dup(0CCh)
; Exported entry 2611. WheaAttemptPhysicalPageOffline

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheaAttemptPhysicalPageOffline(x, x, x)
		public _WheaAttemptPhysicalPageOffline@12
_WheaAttemptPhysicalPageOffline@12 proc	near ; CODE XREF: WheapPfaMemoryCheck(x,x)+145p
					; WheapPfaRetireExpiredMemoryEntries(x,x)+A8p

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_1B		= byte ptr -1Bh
var_1A		= dword	ptr -1Ah
var_15		= dword	ptr -15h
var_11		= dword	ptr -11h
var_D		= dword	ptr -0Dh
var_9		= dword	ptr -9
var_5		= dword	ptr -5
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch
arg_8		= byte ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 40h
		mov	eax, large fs:124h
		push	ebx
		xor	ebx, ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	edx, ebx
		mov	ecx, esi
		mov	[esp+48h+var_1A+1], ebx
		shld	edx, ecx, 0Ch
		mov	[esp+48h+var_15], ebx
		mov	[esp+48h+var_11], ebx
		mov	[esp+48h+var_D], ebx
		mov	[esp+48h+var_9], ebx
		mov	[esp+48h+var_5], ebx
		mov	[esp+48h+var_1], bl
		mov	[esp+48h+var_34], ebx
		shl	ecx, 0Ch
		cmp	byte ptr [eax+15Ah], 1
		jnz	short loc_A12680
		mov	al, [ebp+arg_4]
		mov	[esp+48h+var_1C], al
		mov	al, [ebp+arg_8]
		push	ebx
		mov	[esp+4Ch+var_1B], al
		lea	eax, [esp+4Ch+var_15+1]
		push	ebx
		push	eax
		mov	[esp+54h+var_1A+1], ebx
		mov	[esp+54h+var_15], ebx
		mov	[esp+54h+var_11], ebx
		mov	[esp+54h+var_D], ebx
		mov	[esp+54h+var_9], ebx
		mov	[esp+54h+var_5], ebx
		mov	[esp+54h+var_1], bl
		mov	[esp+54h+var_28], ecx
		mov	[esp+54h+var_24], edx
		mov	[esp+54h+var_20], esi
		mov	byte ptr [esp+54h+var_1A], bl
		call	_KeInitializeEvent@12 ;	KeInitializeEvent(x,x,x)
		lea	eax, [esp+48h+var_28]
		mov	[esp+48h+var_30], offset _WheapAttemptPhysicalPageOfflineWorker@4 ; WheapAttemptPhysicalPageOfflineWorker(x)
		mov	[esp+48h+var_2C], eax
		lea	eax, [esp+48h+var_38]
		push	1
		push	eax
		mov	[esp+50h+var_38], ebx
		call	ExQueueWorkItem
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [esp+58h+var_15+1]
		push	eax
		call	KeWaitForSingleObject
		mov	eax, [esp+48h+var_1A+2]
		jmp	short loc_A12690
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12680:				; CODE XREF: WheaAttemptPhysicalPageOffline(x,x,x)+4Aj
		push	edx
		mov	dl, [ebp+arg_4]
		push	ecx
		push	ecx
		push	dword ptr [ebp+arg_8]
		mov	ecx, esi
		call	_WheapAttemptPhysicalPageOffline@24 ; WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)

loc_A12690:				; CODE XREF: WheaAttemptPhysicalPageOffline(x,x,x)+C4j
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
_WheaAttemptPhysicalPageOffline@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapAttemptPhysicalPageOffline(x, x, x, x,	x, x)
_WheapAttemptPhysicalPageOffline@24 proc near ;	CODE XREF: WheaAttemptClearPoison(x,x,x)+AEp
					; WheaAttemptPhysicalPageOffline(x,x,x)+D1p ...

var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_B		= dword	ptr -0Bh
var_4		= dword	ptr -4
arg_0		= byte ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 54h
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+54h+var_4], eax
		push	ebx
		push	esi
		push	edi
		push	29h		; size_t
		lea	eax, [esp+64h+var_30]
		mov	[esp+64h+var_40], edx
		mov	ebx, ecx
		push	0		; int
		push	eax		; void *
		mov	[esp+6Ch+var_50], ebx
		call	_memset
		and	[esp+6Ch+var_34], 0
		mov	esi, ebx
		mov	bh, [ebp+arg_0]
		xor	ecx, ecx
		shld	ecx, esi, 0Ch
		xor	edx, edx
		mov	byte ptr [esp+6Ch+var_4C], 0
		shl	esi, 0Ch
		add	esp, 0Ch
		inc	edx
		mov	[esp+60h+var_3C], ecx
		mov	[esp+60h+var_48], esi
		mov	[esp+60h+var_44], ecx
		mov	[esp+60h+var_38], 1000h
		test	bh, bh
		jnz	short loc_A12711
		mov	eax, esi
		mov	[esp+60h+var_44], ecx
		or	eax, edx
		mov	[esp+60h+var_54], edx
		mov	[esp+60h+var_48], eax
		jmp	short loc_A12719
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12711:				; CODE XREF: WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)+65j
		mov	[esp+60h+var_54], 2

loc_A12719:				; CODE XREF: WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)+77j
		lea	eax, [esp+60h+var_38]
		or	bl, 0FFh
		push	eax
		lea	eax, [esp+64h+var_48]
		push	eax
		call	_MmMarkPhysicalMemoryAsBad@8 ; MmMarkPhysicalMemoryAsBad(x,x)
		mov	edi, eax
		test	edi, edi
		js	short loc_A12799
		setz	bl
		call	ds:__imp__KeGetCurrentIrql@0 ; KeGetCurrentIrql()
		cmp	al, 2
		ja	short loc_A12799
		mov	eax, [esp+60h+var_54]
		and	[esp+60h+var_24], 0
		mov	[esp+60h+var_10], eax
		mov	eax, [esp+60h+var_50]
		mov	[esp+60h+var_B], eax
		lea	eax, [esp+60h+var_30]
		push	eax
		mov	[esp+64h+var_30], 674C6857h
		mov	[esp+64h+var_2C], 1
		mov	[esp+64h+var_28], 29h
		mov	[esp+64h+var_1C], 80000006h
		mov	[esp+64h+var_20], 4C4E524Bh
		mov	[esp+64h+var_18], 2
		mov	[esp+64h+var_14], 9
		mov	[esp+64h+var_C], bl
		call	WheaLogInternalEvent

loc_A12799:				; CODE XREF: WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)+97j
					; WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)+A4j
		cmp	_WheapPolicyMemPersistOffline, 0
		jz	short loc_A127B8
		mov	ecx, [esp+60h+var_50]
		call	_WheaPersistBadPageToBcd@4 ; WheaPersistBadPageToBcd(x)
		test	eax, eax
		jns	short loc_A127B3
		mov	edi, eax
		jmp	short loc_A127B8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A127B3:				; CODE XREF: WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)+115j
		mov	byte ptr [esp+60h+var_4C], 1

loc_A127B8:				; CODE XREF: WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)+108j
					; WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)+119j
		mov	eax, 0FFh
		cmp	bl, al
		jz	short loc_A127C6
		test	bl, bl
		setz	al

loc_A127C6:				; CODE XREF: WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)+127j
		push	[esp+60h+var_40]
		mov	dl, bh
		mov	cl, al
		push	[esp+64h+var_4C]
		push	[esp+68h+var_3C]
		push	esi
		call	_WheapLogPageOfflineAttemptEvent@24 ; WheapLogPageOfflineAttemptEvent(x,x,x,x,x,x)
		mov	ecx, [esp+60h+var_4]
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn	10h
_WheapAttemptPhysicalPageOffline@24 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapAttemptPhysicalPageOfflineWorker(x)
_WheapAttemptPhysicalPageOfflineWorker@4 proc near
					; DATA XREF: WheaAttemptClearPoison(x,x,x)+76o
					; WheaAttemptPhysicalPageOffline(x,x,x)+96o

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		push	dword ptr [esi+4]
		movzx	eax, byte ptr [esi+0Dh]
		push	dword ptr [esi]
		mov	dl, [esi+0Ch]
		push	ecx
		mov	ecx, [esi+8]
		push	eax
		call	_WheapAttemptPhysicalPageOffline@24 ; WheapAttemptPhysicalPageOffline(x,x,x,x,x,x)
		push	0
		mov	[esi+10h], eax
		lea	eax, [esi+14h]
		push	0
		push	eax
		call	_KeSetEvent@12	; KeSetEvent(x,x,x)
		pop	esi
		pop	ebp
		retn	4
_WheapAttemptPhysicalPageOfflineWorker@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapCountBadPageExtents(x,	x)
_WheapCountBadPageExtents@8 proc near	; CODE XREF: WheaPersistBadPageToBcd(x)+14Ap

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		xor	eax, eax
		mov	[ebp+var_8], edx
		push	esi
		mov	esi, ecx
		test	edx, edx
		jz	short loc_A12878
		xor	ecx, ecx
		inc	eax
		push	ebx
		mov	ebx, [esi+4]
		inc	ecx
		push	edi
		mov	edi, [esi]
		cmp	edx, ecx
		jbe	short loc_A12876

loc_A12849:				; CODE XREF: WheapCountBadPageExtents(x,x)+4Ej
		mov	edx, [esi+ecx*8]
		add	edi, 1
		mov	[ebp+var_4], edx
		mov	edx, [esi+ecx*8+4]
		adc	ebx, 0
		mov	[ebp+var_C], edx
		cmp	edx, ebx
		mov	edx, [ebp+var_8]
		jb	short loc_A1286B
		ja	short loc_A1286A
		cmp	[ebp+var_4], edi
		jbe	short loc_A1286B

loc_A1286A:				; CODE XREF: WheapCountBadPageExtents(x,x)+3Dj
		inc	eax

loc_A1286B:				; CODE XREF: WheapCountBadPageExtents(x,x)+3Bj
					; WheapCountBadPageExtents(x,x)+42j
		mov	edi, [ebp+var_4]
		inc	ecx
		mov	ebx, [ebp+var_C]
		cmp	ecx, edx
		jb	short loc_A12849

loc_A12876:				; CODE XREF: WheapCountBadPageExtents(x,x)+21j
		pop	edi
		pop	ebx

loc_A12878:				; CODE XREF: WheapCountBadPageExtents(x,x)+12j
		pop	esi
		leave
		retn
_WheapCountBadPageExtents@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapIsPageInList(x, x, x)
_WheapIsPageInList@12 proc near		; CODE XREF: WheaPersistBadPageToBcd(x)+11Dp

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, ecx
		xor	ecx, ecx
		mov	esi, ecx
		test	edx, edx
		jz	short loc_A128A3

loc_A1288C:				; CODE XREF: WheapIsPageInList(x,x,x)+22j
		mov	eax, [edi+esi*8]
		cmp	eax, [ebp+arg_0]
		jnz	short loc_A1289A
		cmp	[edi+esi*8+4], ecx
		jz	short loc_A128A1

loc_A1289A:				; CODE XREF: WheapIsPageInList(x,x,x)+17j
		inc	esi
		cmp	esi, edx
		jb	short loc_A1288C
		jmp	short loc_A128A3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A128A1:				; CODE XREF: WheapIsPageInList(x,x,x)+1Dj
		mov	cl, 1

loc_A128A3:				; CODE XREF: WheapIsPageInList(x,x,x)+Fj
					; WheapIsPageInList(x,x,x)+24j
		pop	edi
		mov	al, cl
		pop	esi
		pop	ebp
		retn	4
_WheapIsPageInList@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapSortBadPages(x, x)
_WheapSortBadPages@8 proc near		; CODE XREF: WheaPersistBadPageToBcd(x)+142p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		cmp	edx, 2
		jb	short locret_A1291F
		push	esi
		xor	esi, esi
		sub	edx, 1
		mov	[ebp+var_10], edx
		jz	short loc_A1291E
		push	ebx
		push	edi

loc_A128C5:				; CODE XREF: WheapSortBadPages(x,x)+6Fj
		mov	eax, edx
		xor	bl, bl
		cmp	eax, esi
		jbe	short loc_A1291C

loc_A128CD:				; CODE XREF: WheapSortBadPages(x,x)+63j
		mov	edx, [ecx+eax*8-4]
		mov	edi, [ecx+eax*8-8]
		mov	[ebp+var_8], edx
		mov	edx, [ecx+eax*8+4]
		mov	[ebp+var_4], edi
		mov	edi, [ecx+eax*8]
		mov	[ebp+var_C], edx
		cmp	[ebp+var_8], edx
		jb	short loc_A1290B
		ja	short loc_A128F1
		cmp	[ebp+var_4], edi
		jbe	short loc_A1290B

loc_A128F1:				; CODE XREF: WheapSortBadPages(x,x)+3Fj
		mov	ebx, [ebp+var_C]
		mov	edx, [ebp+var_8]
		mov	[ecx+eax*8-4], ebx
		mov	ebx, [ebp+var_4]
		mov	[ecx+eax*8], ebx
		mov	bl, 1
		mov	[ecx+eax*8-8], edi
		mov	[ecx+eax*8+4], edx

loc_A1290B:				; CODE XREF: WheapSortBadPages(x,x)+3Dj
					; WheapSortBadPages(x,x)+44j
		dec	eax
		cmp	eax, esi
		ja	short loc_A128CD
		mov	edx, [ebp+var_10]
		test	bl, bl
		jz	short loc_A1291C
		inc	esi
		cmp	esi, edx
		jb	short loc_A128C5

loc_A1291C:				; CODE XREF: WheapSortBadPages(x,x)+20j
					; WheapSortBadPages(x,x)+6Aj
		pop	edi
		pop	ebx

loc_A1291E:				; CODE XREF: WheapSortBadPages(x,x)+16j
		pop	esi

locret_A1291F:				; CODE XREF: WheapSortBadPages(x,x)+Bj
		leave
		retn
_WheapSortBadPages@8 endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

; __stdcall WheapApplyPolicyChanges()
_WheapApplyPolicyChanges@0:		; CODE XREF: WheapPfaReset():loc_A131E1p
		mov	edi, edi
		push	ebx
		push	esi
		xor	ebx, ebx
		push	edi
		mov	edi, ds:__imp__HalWheaUpdateCmciPolicy@8 ; HalWheaUpdateCmciPolicy(x,x)
		mov	esi, ebx

loc_A12930:				; CODE XREF: PAGE:00A12A8Bj
		cmp	ds:_WheaRegPolicyTableChanged[esi], bl
		jz	loc_A12A87
		cmp	esi, 0Dh
		jnb	loc_A12A95
		mov	eax, esi
		mov	ds:_WheaRegPolicyTableChanged[esi], bl
		shl	eax, 4
		mov	ecx, ds:off_A41B9C[eax]
		jmp	ds:off_A12A9D[esi*4]

loc_A1295D:				; DATA XREF: PAGE:off_A12A9Do
		cmp	[ecx], ebx
		setnz	_WheapPolicyDisableOffline
		or	_WheaRegistryKeysPresent, 1
		jmp	loc_A12A87
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12972:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AA1o
		cmp	[ecx], ebx
		setnz	_WheapPolicyMemPersistOffline
		or	_WheaRegistryKeysPresent, 2
		jmp	loc_A12A87
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12987:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AA5o
		cmp	[ecx], ebx
		setnz	_WheapPolicyMemPfaDisable
		or	_WheaRegistryKeysPresent, 4
		jmp	loc_A12A87
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1299C:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AA9o
		mov	eax, [ecx]
		or	_WheaRegistryKeysPresent, 8
		mov	_WheapPolicyMemPfaPageCount, eax
		jmp	loc_A12A87
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A129AF:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AADo
		mov	eax, [ecx]
		or	_WheaRegistryKeysPresent, 10h
		mov	_WheapPolicyMemPfaThreshold, eax
		jmp	loc_A12A87
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A129C2:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AB1o
		mov	eax, [ecx]
		mov	ecx, (offset loc_98967E+2)
		mul	ecx
		or	_WheaRegistryKeysPresent, 20h
		mov	_WheapPolicyMemPfaTimeout, eax
		mov	dword_6B68EC, edx
		jmp	loc_A12A87
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A129E2:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AB5o
		xor	eax, eax
		cmp	[ecx], ebx
		setnz	al
		or	_WheaRegistryKeysPresent, 100h
		mov	_WheaRegPolicyIgnoreDummyWrite,	eax
		jmp	loc_A12A87
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A129FD:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AB9o
		cmp	[ecx], ebx
		setnz	al
		or	_WheaRegistryKeysPresent, 200h
		mov	_WheapPolicyRestoreCmciEnabled,	al
		movzx	eax, al
		push	eax
		push	7
		jmp	short loc_A12A85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12A19:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12ABDo
		mov	eax, [ecx]
		or	_WheaRegistryKeysPresent, 400h
		push	eax
		mov	_WheapPolicyRestoreCmciMaxAttempts, eax
		push	8
		jmp	short loc_A12A85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12A2F:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AC1o
		mov	eax, [ecx]
		or	_WheaRegistryKeysPresent, 800h
		push	eax
		mov	_WheapPolicyRestoreCmciErrorLimit, eax
		push	9
		jmp	short loc_A12A85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12A45:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AC5o
		mov	eax, [ecx]
		or	_WheaRegistryKeysPresent, 1000h
		push	eax
		mov	_WheapPolicyCmciThresholdCount,	eax
		push	0Ah
		jmp	short loc_A12A85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12A5B:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12AC9o
		mov	eax, [ecx]
		or	_WheaRegistryKeysPresent, 2000h
		push	eax
		mov	_WheapPolicyCmciThresholdTime, eax
		push	0Bh
		jmp	short loc_A12A85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12A71:				; CODE XREF: PAGE:00A12956j
					; DATA XREF: PAGE:00A12ACDo
		mov	eax, [ecx]
		or	_WheaRegistryKeysPresent, 4000h
		push	eax
		mov	_WheapPolicyCmciThresholdPollCount, eax
		push	0Ch

loc_A12A85:				; CODE XREF: PAGE:00A12A17j
					; PAGE:00A12A2Dj ...
		call	edi

loc_A12A87:				; CODE XREF: PAGE:00A12936j
					; PAGE:00A1296Dj ...
		inc	esi
		cmp	esi, 0Dh
		jb	loc_A12930
		pop	edi
		pop	esi
		pop	ebx
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12A95:				; CODE XREF: PAGE:00A1293Fj
		call	___report_rangecheckfailure
		lea	ecx, [ecx+0]
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
off_A12A9D	dd offset loc_A1295D	; DATA XREF: PAGE:00A12956r
		dd offset loc_A12972
		dd offset loc_A12987
		dd offset loc_A1299C
		dd offset loc_A129AF
		dd offset loc_A129C2
		dd offset loc_A129E2
		dd offset loc_A129FD
		dd offset loc_A12A19
		dd offset loc_A12A2F
		dd offset loc_A12A45
		dd offset loc_A12A5B
		dd offset loc_A12A71

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapCommitPolicy()
_WheapCommitPolicy@0 proc near		; CODE XREF: WheapWmiExecutePolicyManagementMethod(x,x,x,x,x)+3Cp

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		mov	edi, offset ??_C@_1BI@ICKPNKKL@?$AAW?$AAH?$AAE?$AAA?$AA?2?$AAP?$AAo?$AAl?$AAi?$AAc?$AAy@FNODOBFM@
		push	edi
		push	2
		call	_RtlCheckRegistryKey@8 ; RtlCheckRegistryKey(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A12B0C
		push	offset ??_C@_19MBPIHHGH@?$AAW?$AAH?$AAE?$AAA@FNODOBFM@
		push	2
		call	_RtlCreateRegistryKey@8	; RtlCreateRegistryKey(x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A12B5F
		push	edi
		push	2
		call	_RtlCreateRegistryKey@8	; RtlCreateRegistryKey(x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A12B5F

loc_A12B0C:				; CODE XREF: WheapCommitPolicy()+19j
		xor	eax, eax
		push	ebx
		mov	[ebp+var_4], eax
		mov	edi, eax
		mov	ebx, offset _WheaRegPolicyTable

loc_A12B19:				; CODE XREF: WheapCommitPolicy()+77j
		cmp	ds:_WheaRegPolicyTableChanged[edi], 0
		jz	short loc_A12B41
		push	4
		push	dword ptr [ebx+4]
		mov	byte ptr [ebp+var_4], 1
		push	4
		push	dword ptr [ebx]
		push	offset ??_C@_1BI@ICKPNKKL@?$AAW?$AAH?$AAE?$AAA?$AA?2?$AAP?$AAo?$AAl?$AAi?$AAc?$AAy@NNGAKEGL@
		push	2
		call	_RtlWriteRegistryValue@24 ; RtlWriteRegistryValue(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A12B59

loc_A12B41:				; CODE XREF: WheapCommitPolicy()+4Fj
		inc	edi
		add	ebx, 10h
		cmp	edi, 0Dh
		jb	short loc_A12B19
		test	esi, esi
		js	short loc_A12B59
		cmp	byte ptr [ebp+var_4], 0
		jz	short loc_A12B59
		call	_WheapPfaReset@0 ; WheapPfaReset()

loc_A12B59:				; CODE XREF: WheapCommitPolicy()+6Ej
					; WheapCommitPolicy()+7Bj ...
		call	_WheapLogPolicyTelemetry@0 ; WheapLogPolicyTelemetry()
		pop	ebx

loc_A12B5F:				; CODE XREF: WheapCommitPolicy()+2Bj
					; WheapCommitPolicy()+39j
		pop	edi
		mov	eax, esi
		pop	esi
		leave
		retn
_WheapCommitPolicy@0 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall WheapGetAllPolicyBufferSize()
_WheapGetAllPolicyBufferSize@0 proc near
					; CODE XREF: WheapWmiExecutePolicyManagementMethod(x,x,x,x,x):loc_6922E3p
		push	34h
		pop	eax
		retn
_WheapGetAllPolicyBufferSize@0 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapGetAllPolicyValues(x, x, x)
_WheapGetAllPolicyValues@12 proc near	; CODE XREF: WheapWmiExecutePolicyManagementMethod(x,x,x,x,x)+CDp

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		cmp	edx, 34h
		jnb	short loc_A12B7A
		mov	eax, 0C0000023h
		jmp	short loc_A12B9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12B7A:				; CODE XREF: WheapGetAllPolicyValues(x,x,x)+8j
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		xor	esi, esi
		mov	dword ptr [ecx], 0Dh

loc_A12B87:				; CODE XREF: WheapGetAllPolicyValues(x,x,x)+32j
		mov	edx, edi
		mov	ecx, esi
		call	_WheapGetPolicyValue@8 ; WheapGetPolicyValue(x,x)
		test	eax, eax
		js	short loc_A12B9D
		inc	esi
		add	edi, 4
		cmp	esi, 0Dh
		jb	short loc_A12B87

loc_A12B9D:				; CODE XREF: WheapGetAllPolicyValues(x,x,x)+29j
		pop	edi
		pop	esi

loc_A12B9F:				; CODE XREF: WheapGetAllPolicyValues(x,x,x)+Fj
		pop	ebp
		retn	4
_WheapGetAllPolicyValues@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall WheapGetPolicyValue(x, x)
_WheapGetPolicyValue@8 proc near	; CODE XREF: WheapWmiExecutePolicyManagementMethod(x,x,x,x,x)+8Fp
					; WheapGetAllPolicyValues(x,x,x)+22p
		mov	edi, edi
		push	esi
		mov	esi, edx
		cmp	ecx, 0Dh
		jb	short loc_A12BB4
		mov	eax, 0C000000Dh
		pop	esi
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12BB4:				; CODE XREF: WheapGetPolicyValue(x,x)+8j
		jmp	ds:off_A12C3F[ecx*4]

loc_A12BBB:				; DATA XREF: PAGE:off_A12C3Fo
		xor	eax, eax
		cmp	_WheapPolicyDisableOffline, al

loc_A12BC3:				; CODE XREF: WheapGetPolicyValue(x,x)+2Dj
					; WheapGetPolicyValue(x,x)+37j	...
		setnz	al
		jmp	short loc_A12C39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12BC8:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C43o
		xor	eax, eax
		cmp	_WheapPolicyMemPersistOffline, al
		jmp	short loc_A12BC3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12BD2:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C47o
		xor	eax, eax
		cmp	_WheapPolicyMemPfaDisable, al
		jmp	short loc_A12BC3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12BDC:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C4Bo
		mov	eax, _WheapPolicyMemPfaPageCount
		jmp	short loc_A12C39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12BE3:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C4Fo
		mov	eax, _WheapPolicyMemPfaThreshold
		jmp	short loc_A12C39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12BEA:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C53o
		push	0
		push	(offset	loc_98967E+2)
		push	dword_6B68EC
		push	_WheapPolicyMemPfaTimeout
		call	__aulldiv
		jmp	short loc_A12C39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12C04:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C57o
		xor	eax, eax
		cmp	_WheaRegPolicyIgnoreDummyWrite,	eax
		jmp	short loc_A12BC3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12C0E:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C5Bo
		xor	eax, eax
		cmp	_WheapPolicyRestoreCmciEnabled,	al
		jmp	short loc_A12BC3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12C18:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C5Fo
		mov	eax, _WheapPolicyRestoreCmciMaxAttempts
		jmp	short loc_A12C39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12C1F:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C63o
		mov	eax, _WheapPolicyRestoreCmciErrorLimit
		jmp	short loc_A12C39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12C26:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C67o
		mov	eax, _WheapPolicyCmciThresholdCount
		jmp	short loc_A12C39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12C2D:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C6Bo
		mov	eax, _WheapPolicyCmciThresholdTime
		jmp	short loc_A12C39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12C34:				; CODE XREF: WheapGetPolicyValue(x,x):loc_A12BB4j
					; DATA XREF: PAGE:00A12C6Fo
		mov	eax, _WheapPolicyCmciThresholdPollCount

loc_A12C39:				; CODE XREF: WheapGetPolicyValue(x,x)+23j
					; WheapGetPolicyValue(x,x)+3Ej	...
		mov	[esi], eax
		xor	eax, eax
		pop	esi
		retn
_WheapGetPolicyValue@8 endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
off_A12C3F	dd offset loc_A12BBB	; DATA XREF: WheapGetPolicyValue(x,x):loc_A12BB4r
		dd offset loc_A12BC8
		dd offset loc_A12BD2
		dd offset loc_A12BDC
		dd offset loc_A12BE3
		dd offset loc_A12BEA
		dd offset loc_A12C04
		dd offset loc_A12C0E
		dd offset loc_A12C18
		dd offset loc_A12C1F
		dd offset loc_A12C26
		dd offset loc_A12C2D
		dd offset loc_A12C34

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapLogPolicyTelemetry()
_WheapLogPolicyTelemetry@0 proc	near	; CODE XREF: WheapCommitPolicy():loc_A12B59p

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_13		= byte ptr -13h
var_12		= byte ptr -12h
var_11		= dword	ptr -11h
var_D		= dword	ptr -0Dh
var_9		= dword	ptr -9
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 38h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		mov	eax, _WheaRegistryKeysPresent
		and	[ebp+var_2C], 0
		mov	[ebp+var_18], eax
		mov	al, _WheapPolicyDisableOffline
		mov	[ebp+var_14], al
		mov	al, _WheapPolicyMemPersistOffline
		push	0
		mov	[ebp+var_13], al
		mov	al, _WheapPolicyMemPfaDisable
		push	989680h
		push	dword_6B68EC
		mov	[ebp+var_12], al
		mov	eax, _WheapPolicyMemPfaPageCount
		push	_WheapPolicyMemPfaTimeout
		mov	[ebp+var_11], eax
		mov	eax, _WheapPolicyMemPfaThreshold
		mov	[ebp+var_38], 674C6857h
		mov	[ebp+var_34], 1
		mov	[ebp+var_30], 33h
		mov	[ebp+var_24], 80000008h
		mov	[ebp+var_28], 4C4E524Bh
		mov	[ebp+var_20], 2
		mov	[ebp+var_1C], 13h
		mov	[ebp+var_D], eax
		call	__aulldiv
		mov	[ebp+var_9], eax
		lea	eax, [ebp+var_38]
		push	eax
		call	WheaLogInternalEvent
		mov	ecx, [ebp+var_4]
		xor	ecx, ebp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn
_WheapLogPolicyTelemetry@0 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall WheapSetPolicyValue(x, x)
_WheapSetPolicyValue@8 proc near	; CODE XREF: WheapWmiExecutePolicyManagementMethod(x,x,x,x,x)+68p
		mov	edi, edi
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		cmp	edi, 0Dh
		jnb	loc_A12E09
		mov	esi, [edx]
		mov	eax, edi
		shl	eax, 4
		cmp	esi, ds:dword_A41BA0[eax]
		jb	loc_A12E09
		cmp	esi, ds:dword_A41BA4[eax]
		ja	loc_A12E09
		lfence	eax
		mov	ebx, ds:off_A41B9C[eax]
		cmp	dword ptr [ebx], 0FFFFFFFFh
		jnz	loc_A12DED
		jmp	ds:off_A12E12[edi*4]

loc_A12D62:				; DATA XREF: PAGE:off_A12E12o
		movzx	eax, _WheapPolicyDisableOffline

loc_A12D69:				; CODE XREF: WheapSetPolicyValue(x,x)+64j
					; WheapSetPolicyValue(x,x)+6Dj
		xor	ecx, ecx
		test	esi, esi
		setnz	cl
		cmp	ecx, eax
		jmp	loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12D77:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E16o
		movzx	eax, _WheapPolicyMemPersistOffline
		jmp	short loc_A12D69
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12D80:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E1Ao
		movzx	eax, _WheapPolicyMemPfaDisable
		jmp	short loc_A12D69
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12D89:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E1Eo
		cmp	esi, _WheapPolicyMemPfaPageCount
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12D91:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E22o
		cmp	esi, _WheapPolicyMemPfaThreshold
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12D99:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E26o
		push	0
		push	(offset	loc_98967E+2)
		push	dword_6B68EC
		push	_WheapPolicyMemPfaTimeout
		call	__aulldiv
		cmp	esi, eax
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12DB5:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E2Ao
		cmp	esi, _WheaRegPolicyIgnoreDummyWrite
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12DBD:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E2Eo
		cmp	esi, _WheapRegPolicyRestoreCmciEnabled
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12DC5:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E32o
		cmp	esi, _WheapRegPolicyRestoreCmciMaxAttempts
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12DCD:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E36o
		cmp	esi, _WheapRegPolicyRestoreCmciErrorLimit
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12DD5:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E3Ao
		cmp	esi, _WheapRegPolicyCmciThresholdCount
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12DDD:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E3Eo
		cmp	esi, _WheapRegPolicyCmciThresholdTime
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12DE5:				; CODE XREF: WheapSetPolicyValue(x,x)+41j
					; DATA XREF: PAGE:00A12E42o
		cmp	esi, _WheapRegPolicyCmciThresholdPollCount
		jmp	short loc_A12DF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12DED:				; CODE XREF: WheapSetPolicyValue(x,x)+3Bj
		lfence	eax
		mov	ebx, ds:off_A41B9C[eax]
		cmp	[ebx], esi

loc_A12DF8:				; CODE XREF: WheapSetPolicyValue(x,x)+58j
					; WheapSetPolicyValue(x,x)+75j	...
		jnz	short loc_A12DFE

loc_A12DFA:				; CODE XREF: WheapSetPolicyValue(x,x)+EDj
		xor	eax, eax
		jmp	short loc_A12E0E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12DFE:				; CODE XREF: WheapSetPolicyValue(x,x):loc_A12DF8j
		mov	[ebx], esi
		mov	ds:_WheaRegPolicyTableChanged[edi], 1
		jmp	short loc_A12DFA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12E09:				; CODE XREF: WheapSetPolicyValue(x,x)+Aj
					; WheapSetPolicyValue(x,x)+1Dj	...
		mov	eax, 0C000000Dh

loc_A12E0E:				; CODE XREF: WheapSetPolicyValue(x,x)+E2j
		pop	edi
		pop	esi
		pop	ebx
		retn
_WheapSetPolicyValue@8 endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
off_A12E12	dd offset loc_A12D62	; DATA XREF: WheapSetPolicyValue(x,x)+41r
		dd offset loc_A12D77
		dd offset loc_A12D80
		dd offset loc_A12D89
		dd offset loc_A12D91
		dd offset loc_A12D99
		dd offset loc_A12DB5
		dd offset loc_A12DBD
		dd offset loc_A12DC5
		dd offset loc_A12DCD
		dd offset loc_A12DD5
		dd offset loc_A12DDD
		dd offset loc_A12DE5

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall WheapReportDeferredLiveDumps()
_WheapReportDeferredLiveDumps@0	proc near
					; CODE XREF: WheaCrashDumpInitializationComplete():loc_8B5C55p
		mov	edi, edi
		push	ebx
		push	esi
		mov	ebx, offset _WheapLiveDumpLock
		xor	esi, esi
		push	edi
		mov	ecx, ebx
		call	ExAcquireFastMutex
		mov	eax, _WheapLiveDumpRecordList
		mov	ecx, offset _WheapLiveDumpRecordList
		cmp	eax, ecx
		jz	short loc_A12E81
		mov	esi, eax
		cmp	[esi+4], ecx
		jnz	loc_A12EF5
		mov	eax, [esi]
		cmp	[eax+4], esi
		jnz	short loc_A12EF5
		mov	_WheapLiveDumpRecordList, eax
		mov	[eax+4], ecx

loc_A12E81:				; CODE XREF: WheapReportDeferredLiveDumps()+1Fj
		mov	ecx, ebx
		call	@ExReleaseFastMutex@4 ;	ExReleaseFastMutex(x)
		xor	bl, bl
		xor	edi, edi
		jmp	short loc_A12EEB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12E8E:				; CODE XREF: WheapReportDeferredLiveDumps()+A7j
		test	bl, bl
		jnz	short loc_A12E9B
		mov	ecx, esi
		call	_WheapReportLiveDump@4 ; WheapReportLiveDump(x)
		mov	edi, eax

loc_A12E9B:				; CODE XREF: WheapReportDeferredLiveDumps()+4Aj
		push	61656857h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		test	bl, bl
		jnz	short loc_A12EB0
		test	edi, edi
		jz	short loc_A12EB0
		inc	bl

loc_A12EB0:				; CODE XREF: WheapReportDeferredLiveDumps()+62j
					; WheapReportDeferredLiveDumps()+66j
		mov	ecx, offset _WheapLiveDumpLock
		call	ExAcquireFastMutex
		mov	esi, _WheapLiveDumpRecordList
		mov	ecx, offset _WheapLiveDumpRecordList
		cmp	esi, ecx
		jz	short loc_A12EDF
		cmp	[esi+4], ecx
		jnz	short loc_A12EF5
		mov	eax, [esi]
		cmp	[eax+4], esi
		jnz	short loc_A12EF5
		mov	_WheapLiveDumpRecordList, eax
		mov	[eax+4], ecx
		jmp	short loc_A12EE1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12EDF:				; CODE XREF: WheapReportDeferredLiveDumps()+81j
		xor	esi, esi

loc_A12EE1:				; CODE XREF: WheapReportDeferredLiveDumps()+97j
		mov	ecx, offset _WheapLiveDumpLock
		call	@ExReleaseFastMutex@4 ;	ExReleaseFastMutex(x)

loc_A12EEB:				; CODE XREF: WheapReportDeferredLiveDumps()+46j
		test	esi, esi
		jnz	short loc_A12E8E
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12EF5:				; CODE XREF: WheapReportDeferredLiveDumps()+26j
					; WheapReportDeferredLiveDumps()+31j ...
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
_WheapReportDeferredLiveDumps@0	endp	; AL = character to display


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapReportLiveDump(x)
_WheapReportLiveDump@4 proc near	; CODE XREF: WheapCreateLiveDumpFromPreviousSession(x)+60p
					; WheapReportDeferredLiveDumps()+4Ep

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, [ecx+8]
		and	[ebp+var_4], 0
		and	[ebp+var_8], 0
		push	ebx
		push	esi
		push	edi
		mov	edi, [ecx+0Ch]
		xor	ebx, ebx
		mov	[ebp+var_10], eax
		movzx	eax, word ptr [edi+0Ah]
		lea	esi, [edi+80h]
		mov	[ebp+var_C], eax
		test	eax, eax
		jz	short loc_A12F49

loc_A12F29:				; CODE XREF: WheapReportLiveDump(x)+4Dj
		push	10h		; size_t
		lea	eax, [esi+10h]
		push	(offset	loc_42E096+2) ;	void *
		push	eax		; void *
		call	_memcmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A12F67
		add	esi, 48h
		inc	ebx
		cmp	ebx, [ebp+var_C]
		jb	short loc_A12F29

loc_A12F49:				; CODE XREF: WheapReportLiveDump(x)+2Dj
		mov	ecx, [ebp+var_8]
		mov	eax, [ebp+var_4]

loc_A12F4F:				; CODE XREF: WheapReportLiveDump(x)+82j
		push	ecx
		push	eax
		push	edi
		push	[ebp+var_10]
		call	_LkmdTelCreateReport@24	; LkmdTelCreateReport(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A12F7E
		mov	edi, 0C000009Ah
		jmp	short loc_A12FBC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12F67:				; CODE XREF: WheapReportLiveDump(x)+44j
		mov	esi, [esi]
		mov	cl, 20h
		mov	eax, [esi+edi+28h]
		mov	edx, [esi+edi+2Ch]
		call	__aullshr
		mov	ecx, [esi+edi+28h]
		jmp	short loc_A12F4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A12F7E:				; CODE XREF: WheapReportLiveDump(x)+64j
		push	dword ptr [edi+14h] ; size_t
		mov	edx, edi
		mov	ecx, esi
		call	_LkmdTelInsertTriageDataBlock@12 ; LkmdTelInsertTriageDataBlock(x,x,x)
		mov	edi, eax
		test	edi, edi
		js	short loc_A12F99
		mov	ecx, esi
		call	_LkmdTelSubmitReport@4 ; LkmdTelSubmitReport(x)
		mov	edi, eax

loc_A12F99:				; CODE XREF: WheapReportLiveDump(x)+94j
		cmp	dword ptr [esi+4], 0
		mov	ebx, 74614454h
		jbe	short loc_A12FB5
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_A12FB1
		push	ebx
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A12FB1:				; CODE XREF: WheapReportLiveDump(x)+AEj
		and	dword ptr [esi+4], 0

loc_A12FB5:				; CODE XREF: WheapReportLiveDump(x)+A8j
		push	ebx
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A12FBC:				; CODE XREF: WheapReportLiveDump(x)+6Bj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_WheapReportLiveDump@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapPfaLogPageMonitorRemoval(x, x,	x, x)
_WheapPfaLogPageMonitorRemoval@16 proc near ; CODE XREF: WheapPfaMemoryCheck(x,x)+D4p
					; WheapPfaMemoryCheck(x,x)+13Bp ...

var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		and	[ebp+var_28], 0
		mov	eax, [ebp+arg_4]
		push	esi
		mov	esi, ecx
		mov	[ebp+var_34], 674C6857h
		mov	ecx, [ebp+arg_0]
		push	0
		push	(offset	loc_98967E+2)
		sub	ecx, [esi+10h]
		mov	[ebp+var_30], 1
		sbb	eax, [esi+14h]
		push	eax
		push	ecx
		mov	[ebp+var_2C], 30h
		mov	[ebp+var_20], 80000007h
		mov	[ebp+var_24], 4C4E524Bh
		mov	[ebp+var_1C], 2
		mov	[ebp+var_18], 10h
		mov	[ebp+var_14], edx
		call	__aulldiv
		mov	[ebp+var_10], eax
		movzx	eax, word ptr [esi+8]
		mov	[ebp+var_C], eax
		mov	eax, [esi+20h]
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_34]
		push	eax
		call	WheaLogInternalEvent
		mov	ecx, [ebp+var_4]
		xor	ecx, ebp
		pop	esi
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	8
_WheapPfaLogPageMonitorRemoval@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapPfaMemoryCheck(x, x)
_WheapPfaMemoryCheck@8 proc near	; CODE XREF: WheapPredictiveFailureAnalysis(x)+D2p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		cmp	_WheapPolicyMemPfaDisable, 0
		push	ebx
		push	esi
		push	edi
		jnz	short loc_A130D9
		mov	eax, [edx]
		and	eax, 2
		or	eax, 0
		jz	short loc_A130D9
		mov	edi, [edx+10h]
		lea	eax, [ebp+var_8]
		mov	esi, [edx+14h]
		push	eax
		mov	[ebp+var_8], edi
		mov	[ebp+var_4], esi
		call	_MmGetPageBadStatus@4 ;	MmGetPageBadStatus(x)
		test	eax, eax
		jnz	short loc_A130D9
		shrd	edi, esi, 0Ch
		call	KeQueryInterruptTime
		mov	ebx, eax
		mov	eax, edx
		push	eax
		push	ebx
		mov	[ebp+var_4], eax
		call	_WheapPfaRetireExpiredMemoryEntries@8 ;	WheapPfaRetireExpiredMemoryEntries(x,x)
		mov	esi, _WheapPfaList
		xor	ecx, ecx
		mov	edx, offset _WheapPfaList
		jmp	short loc_A130B9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A130AF:				; CODE XREF: WheapPfaMemoryCheck(x,x)+69j
		mov	eax, [esi]
		cmp	[esi+20h], edi
		jz	short loc_A130DE
		inc	ecx
		mov	esi, eax

loc_A130B9:				; CODE XREF: WheapPfaMemoryCheck(x,x)+5Bj
		cmp	esi, edx
		jnz	short loc_A130AF
		cmp	ecx, _WheapPolicyMemPfaPageCount
		jnb	short loc_A130FC
		push	61656857h
		push	28h
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A1312B

loc_A130D9:				; CODE XREF: WheapPfaMemoryCheck(x,x)+12j
					; WheapPfaMemoryCheck(x,x)+1Cj	...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A130DE:				; CODE XREF: WheapPfaMemoryCheck(x,x)+62j
		cmp	[eax+4], esi
		jnz	loc_A131AC
		mov	ecx, [esi+4]
		cmp	[ecx], esi
		jnz	loc_A131AC
		mov	[ecx], eax
		mov	[eax+4], ecx
		mov	ecx, [ebp+var_4]
		jmp	short loc_A13153
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A130FC:				; CODE XREF: WheapPfaMemoryCheck(x,x)+71j
		mov	esi, dword_6FD8CC
		mov	eax, [esi]
		cmp	[eax+4], esi
		jnz	loc_A131AC
		mov	ecx, [esi+4]
		cmp	[ecx], esi
		jnz	loc_A131AC
		push	[ebp+var_4]
		mov	[ecx], eax
		push	ebx
		push	3
		mov	[eax+4], ecx
		mov	ecx, esi
		pop	edx
		call	_WheapPfaLogPageMonitorRemoval@16 ; WheapPfaLogPageMonitorRemoval(x,x,x,x)

loc_A1312B:				; CODE XREF: WheapPfaMemoryCheck(x,x)+85j
		xor	ecx, ecx
		mov	edx, offset _WheapPfaList
		mov	[esi], ecx
		xor	eax, eax
		mov	[esi+4], ecx
		mov	[esi+0Ah], ecx
		mov	[esi+0Eh], ax
		mov	[esi+24h], ecx
		mov	ecx, [ebp+var_4]
		mov	[esi+8], ax
		mov	[esi+10h], ebx
		mov	[esi+14h], ecx
		mov	[esi+20h], edi

loc_A13153:				; CODE XREF: WheapPfaMemoryCheck(x,x)+A8j
		inc	word ptr [esi+8]
		movzx	eax, word ptr [esi+8]
		mov	[esi+18h], ebx
		mov	[esi+1Ch], ecx
		cmp	eax, _WheapPolicyMemPfaThreshold
		jnb	short loc_A13186
		mov	eax, _WheapPfaList
		cmp	[eax+4], edx
		jnz	short loc_A131AC
		mov	[esi], eax
		mov	[esi+4], edx
		mov	[eax+4], esi
		mov	_WheapPfaList, esi
		jmp	loc_A130D9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13186:				; CODE XREF: WheapPfaMemoryCheck(x,x)+115j
		push	ecx
		xor	edx, edx
		mov	ecx, esi
		push	ebx
		inc	edx
		call	_WheapPfaLogPageMonitorRemoval@16 ; WheapPfaLogPageMonitorRemoval(x,x,x,x)
		push	0
		push	0
		push	edi
		call	_WheaAttemptPhysicalPageOffline@12 ; WheaAttemptPhysicalPageOffline(x,x,x)
		push	61656857h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		jmp	loc_A130D9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A131AC:				; CODE XREF: WheapPfaMemoryCheck(x,x)+8Fj
					; WheapPfaMemoryCheck(x,x)+9Aj	...
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
_WheapPfaMemoryCheck@8 endp		; AL = character to display


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall WheapPfaReset()
_WheapPfaReset@0 proc near		; CODE XREF: WheapCommitPolicy()+83p
		mov	edi, edi
		push	ebx
		push	esi
		push	edi
		mov	edi, offset _WheapPfaLock
		xor	edx, edx
		push	0
		mov	ecx, edi
		call	KeAbPreAcquire
		mov	esi, eax
		lock bts dword ptr [edi], 0
		jnb	short loc_A131D9
		push	edi
		mov	edx, esi
		mov	ecx, edi
		call	ExfAcquirePushLockExclusiveEx

loc_A131D9:				; CODE XREF: WheapPfaReset()+1Cj
		test	esi, esi
		jz	short loc_A131E1
		or	byte ptr [esi+0Eh], 1

loc_A131E1:				; CODE XREF: WheapPfaReset()+2Aj
		call	_WheapApplyPolicyChanges@0 ; WheapApplyPolicyChanges()
		mov	esi, _WheapPfaList
		mov	ebx, offset _WheapPfaList
		jmp	short loc_A13215
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A131F3:				; CODE XREF: WheapPfaReset()+66j
		mov	ecx, [esi]
		mov	eax, esi
		mov	esi, ecx
		cmp	[ecx+4], eax
		jnz	short loc_A13237
		mov	edx, [eax+4]
		cmp	[edx], eax
		jnz	short loc_A13237
		push	61656857h
		mov	[edx], ecx
		push	eax
		mov	[ecx+4], edx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A13215:				; CODE XREF: WheapPfaReset()+40j
		cmp	esi, ebx
		jnz	short loc_A131F3
		or	eax, 0FFFFFFFFh
		lock xadd [edi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1322D
		mov	ecx, edi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1322D:				; CODE XREF: WheapPfaReset()+73j
		mov	ecx, edi
		pop	edi
		pop	esi
		pop	ebx
		jmp	KeAbPostRelease
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13237:				; CODE XREF: WheapPfaReset()+4Bj
					; WheapPfaReset()+52j
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
_WheapPfaReset@0 endp			; AL = character to display


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WheapPfaRetireExpiredMemoryEntries(x, x)
_WheapPfaRetireExpiredMemoryEntries@8 proc near	; CODE XREF: WheapPfaMemoryCheck(x,x)+49p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		mov	edx, _WheapPolicyMemPfaTimeout
		mov	eax, edx
		mov	ecx, dword_6B68EC
		or	eax, ecx
		push	ebx
		push	esi
		push	edi
		jz	short loc_A132BF
		cmp	[ebp+arg_4], ecx
		jb	short loc_A132BF
		ja	short loc_A13263
		cmp	[ebp+arg_0], edx
		jb	short loc_A132BF

loc_A13263:				; CODE XREF: WheapPfaRetireExpiredMemoryEntries(x,x)+20j
		mov	ebx, [ebp+arg_0]
		mov	esi, _WheapPfaList
		sub	ebx, edx
		mov	edx, [ebp+arg_4]
		sbb	edx, ecx
		mov	[ebp+var_4], edx
		jmp	short loc_A132B7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13278:				; CODE XREF: WheapPfaRetireExpiredMemoryEntries(x,x)+81j
		mov	edi, esi
		mov	esi, [esi]
		cmp	[edi+1Ch], edx
		ja	short loc_A132B7
		jb	short loc_A13288
		cmp	[edi+18h], ebx
		ja	short loc_A132B7

loc_A13288:				; CODE XREF: WheapPfaRetireExpiredMemoryEntries(x,x)+45j
		cmp	[esi+4], edi
		jnz	short loc_A132C6
		mov	eax, [edi+4]
		cmp	[eax], edi
		jnz	short loc_A132C6
		push	[ebp+arg_4]
		mov	[eax], esi
		mov	ecx, edi
		push	[ebp+arg_0]
		mov	[esi+4], eax
		push	2
		pop	edx
		call	_WheapPfaLogPageMonitorRemoval@16 ; WheapPfaLogPageMonitorRemoval(x,x,x,x)
		push	61656857h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	edx, [ebp+var_4]

loc_A132B7:				; CODE XREF: WheapPfaRetireExpiredMemoryEntries(x,x)+3Aj
					; WheapPfaRetireExpiredMemoryEntries(x,x)+43j ...
		cmp	esi, offset _WheapPfaList
		jnz	short loc_A13278

loc_A132BF:				; CODE XREF: WheapPfaRetireExpiredMemoryEntries(x,x)+19j
					; WheapPfaRetireExpiredMemoryEntries(x,x)+1Ej ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A132C6:				; CODE XREF: WheapPfaRetireExpiredMemoryEntries(x,x)+4Fj
					; WheapPfaRetireExpiredMemoryEntries(x,x)+56j
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
					; AL = character to display

; __stdcall WheapPlatformDirectedMemoryOffline(x, x)
_WheapPlatformDirectedMemoryOffline@8:	; CODE XREF: WheapPredictiveFailureAnalysis(x)+A0j
		mov	eax, [edx]
		and	eax, 2
		or	eax, 0
		jz	short locret_A132E9
		mov	ecx, [edx+10h]
		mov	eax, [edx+14h]
		push	0
		shrd	ecx, eax, 0Ch
		push	1
		push	ecx
		call	_WheaAttemptPhysicalPageOffline@12 ; WheaAttemptPhysicalPageOffline(x,x,x)

locret_A132E9:				; CODE XREF: WheapPfaRetireExpiredMemoryEntries(x,x)+97j
		retn
_WheapPfaRetireExpiredMemoryEntries@8 endp ; sp	= -14h


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall WheapPredictiveFailureAnalysis(x)
_WheapPredictiveFailureAnalysis@4 proc near ; CODE XREF: WheapProcessWorkQueueItem(x,x)+61p
		mov	edi, edi
		push	ebx
		mov	ebx, ecx
		push	esi
		push	edi
		lea	esi, [ebx+1Ch]
		push	esi
		call	ds:__imp__PshedDoPfa@4 ; PshedDoPfa(x)
		cmp	eax, 1
		jz	loc_A133DF
		cmp	_WheapPolicyDisableOffline, 0
		jnz	loc_A133DF
		cmp	_WheapPfaInitialized, 0
		jz	loc_A133DF
		movzx	eax, word ptr [esi+0Ah]
		test	ax, ax
		jz	loc_A133DF
		cmp	dword ptr [esi+0Ch], 2
		jnz	loc_A133DF
		test	byte ptr [esi+68h], 1
		jnz	loc_A133DF
		xor	ecx, ecx
		test	eax, eax
		jz	short loc_A13359
		lea	edi, [esi+80h]

loc_A1334B:				; CODE XREF: WheapPredictiveFailureAnalysis(x)+6Dj
		test	byte ptr [edi+0Ch], 1
		jnz	short loc_A1335F
		inc	ecx
		add	edi, 48h
		cmp	ecx, eax
		jb	short loc_A1334B

loc_A13359:				; CODE XREF: WheapPredictiveFailureAnalysis(x)+59j
		lea	edi, [esi+80h]

loc_A1335F:				; CODE XREF: WheapPredictiveFailureAnalysis(x)+65j
		push	10h		; size_t
		lea	eax, [edi+10h]
		push	offset _MEMORY_ERROR_SECTION_GUID ; void *
		push	eax		; void *
		call	_memcmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_A133DF
		mov	edi, [edi]
		mov	eax, [ebx+10h]
		add	edi, esi
		test	al, 4
		jz	short loc_A1338F
		test	al, 8
		jz	short loc_A133DF
		mov	edx, edi
		pop	edi
		pop	esi
		pop	ebx
		jmp	_WheapPlatformDirectedMemoryOffline@8 ;	WheapPlatformDirectedMemoryOffline(x,x)
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1338F:				; CODE XREF: WheapPredictiveFailureAnalysis(x)+95j
		mov	ebx, offset _WheapPfaLock
		xor	edx, edx
		push	0
		mov	ecx, ebx
		call	KeAbPreAcquire
		mov	esi, eax
		lock bts dword ptr [ebx], 0
		jnb	short loc_A133B2
		push	ebx
		mov	edx, esi
		mov	ecx, ebx
		call	ExfAcquirePushLockExclusiveEx

loc_A133B2:				; CODE XREF: WheapPredictiveFailureAnalysis(x)+BCj
		test	esi, esi
		jz	short loc_A133BA
		or	byte ptr [esi+0Eh], 1

loc_A133BA:				; CODE XREF: WheapPredictiveFailureAnalysis(x)+CAj
		mov	edx, edi
		call	_WheapPfaMemoryCheck@8 ; WheapPfaMemoryCheck(x,x)
		or	eax, 0FFFFFFFFh
		lock xadd [ebx], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A133D5
		mov	ecx, ebx
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A133D5:				; CODE XREF: WheapPredictiveFailureAnalysis(x)+E2j
		mov	ecx, ebx
		pop	edi
		pop	esi
		pop	ebx
		jmp	KeAbPostRelease
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A133DF:				; CODE XREF: WheapPredictiveFailureAnalysis(x)+14j
					; WheapPredictiveFailureAnalysis(x)+21j ...
		pop	edi
		pop	esi
		pop	ebx
		retn
_WheapPredictiveFailureAnalysis@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall ApiSetLoadSchemaEx(x, x, x)
_ApiSetLoadSchemaEx@12 proc near	; CODE XREF: ApiSetLoadSchemaWithExtensions(x,x,x)+1Fp
					; ApiSetpLoadSchemaExtension+B4p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		and	[ebp+var_8], 0
		lea	eax, [ebp+var_8]
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		push	edi
		push	eax
		lea	eax, [ebp+var_4]
		mov	[ebp+var_C], edx
		push	eax
		mov	edx, ecx
		call	ApiSetpLoadSchemaImage
		mov	edi, [ebp+var_4]
		mov	esi, eax
		test	esi, esi
		js	short loc_A13464
		push	ecx
		mov	ecx, edi
		call	ApiSetpFindImageSection
		test	eax, eax
		jnz	short loc_A13424
		mov	esi, 0C000007Bh
		jmp	short loc_A13464
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13424:				; CODE XREF: ApiSetLoadSchemaEx(x,x,x)+38j
		mov	ecx, [eax+14h]
		mov	ebx, [eax+10h]
		add	ecx, edi
		push	68635341h
		push	ebx
		push	1
		mov	[ebp+var_8], ecx
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	[ebp+var_4], eax
		test	eax, eax
		jnz	short loc_A1344A
		mov	esi, 0C0000017h
		jmp	short loc_A13464
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1344A:				; CODE XREF: ApiSetLoadSchemaEx(x,x,x)+5Ej
		push	ebx		; size_t
		push	[ebp+var_8]	; void *
		push	eax		; void *
		call	_memcpy
		mov	ecx, [ebp+var_C]
		add	esp, 0Ch
		mov	eax, [ebp+var_4]
		mov	[ecx], eax
		mov	eax, [ebp+arg_0]
		mov	[eax], ebx

loc_A13464:				; CODE XREF: ApiSetLoadSchemaEx(x,x,x)+2Cj
					; ApiSetLoadSchemaEx(x,x,x)+3Fj ...
		test	edi, edi
		jz	short loc_A13470
		push	edi
		push	0FFFFFFFFh
		call	_ZwUnmapViewOfSection@8	; ZwUnmapViewOfSection(x,x)

loc_A13470:				; CODE XREF: ApiSetLoadSchemaEx(x,x,x)+83j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	4
_ApiSetLoadSchemaEx@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall ApiSetLoadSchemaWithExtensions(x, x, x)
_ApiSetLoadSchemaWithExtensions@12 proc	near ; CODE XREF: PspSiloLoadApiSets(x)+47p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		and	[ebp+var_C], 0
		lea	eax, [ebp+var_C]
		or	[ebp+var_8], 0FFFFFFFFh
		and	[ebp+var_4], 0
		push	esi
		push	edi
		mov	edi, edx
		lea	edx, [ebp+var_4]
		push	eax
		call	_ApiSetLoadSchemaEx@12 ; ApiSetLoadSchemaEx(x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A134EF
		mov	ecx, [ebp+var_4]
		call	_ApiSetIsSchemaSealed@4	; ApiSetIsSchemaSealed(x)
		test	al, al
		jnz	short loc_A134DA
		lea	ecx, [ebp+var_8]
		call	ApiSetpOpenSchemaExtensionsRootNode
		mov	esi, eax
		test	esi, esi
		jns	short loc_A134C9
		cmp	esi, 0C0000034h
		jnz	short loc_A134DA
		xor	esi, esi
		jmp	short loc_A134DA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A134C9:				; CODE XREF: ApiSetLoadSchemaWithExtensions(x,x,x)+42j
		mov	ecx, [ebp+var_8]
		lea	eax, [ebp+var_C]
		push	eax
		lea	edx, [ebp+var_4]
		call	ApiSetpLoadSchemaExtensions
		mov	esi, eax

loc_A134DA:				; CODE XREF: ApiSetLoadSchemaWithExtensions(x,x,x)+34j
					; ApiSetLoadSchemaWithExtensions(x,x,x)+4Aj ...
		test	esi, esi
		js	short loc_A134EF
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		and	[ebp+var_4], 0
		mov	[edi], eax
		mov	eax, [ebp+var_C]
		mov	[ecx], eax

loc_A134EF:				; CODE XREF: ApiSetLoadSchemaWithExtensions(x,x,x)+28j
					; ApiSetLoadSchemaWithExtensions(x,x,x)+63j
		cmp	[ebp+var_8], 0FFFFFFFFh
		jz	short loc_A134FD
		push	[ebp+var_8]
		call	_ZwClose@4	; ZwClose(x)

loc_A134FD:				; CODE XREF: ApiSetLoadSchemaWithExtensions(x,x,x)+7Aj
		mov	ecx, [ebp+var_4]
		test	ecx, ecx
		jz	short loc_A13509
		call	_ApiSetReleaseSchema@4 ; ApiSetReleaseSchema(x)

loc_A13509:				; CODE XREF: ApiSetLoadSchemaWithExtensions(x,x,x)+89j
		pop	edi
		mov	eax, esi
		pop	esi
		leave
		retn	4
_ApiSetLoadSchemaWithExtensions@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

ApiSetpConstructPathToExtension	proc near ; CODE XREF: ApiSetpLoadSchemaExtension+96p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		and	[ebp+var_8], 0
		lea	eax, [edx+2Ch]
		push	esi
		push	edi
		mov	word ptr [ebp+var_8+2],	ax
		mov	edi, ecx
		push	68635341h
		movzx	eax, ax
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	[ebp+var_4], eax
		test	eax, eax
		jnz	short loc_A13545
		mov	esi, 0C0000017h
		jmp	short loc_A1358A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13545:				; CODE XREF: ApiSetpConstructPathToExtension+2Bj
		push	offset ??_C@_1CM@JIIAJDGD@?$AA?2?$AAS?$AAy?$AAs?$AAt?$AAe?$AAm?$AAR?$AAo?$AAo?$AAt?$AA?2?$AAS?$AAy?$AAs@NNGAKEGL@ ; void *
		lea	eax, [ebp+var_8]
		push	eax		; int
		call	_RtlAppendUnicodeToString@8 ; RtlAppendUnicodeToString(x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A1357B
		push	edi		; void *
		lea	eax, [ebp+var_8]
		push	eax		; int
		call	_RtlAppendUnicodeToString@8 ; RtlAppendUnicodeToString(x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A1357B
		mov	ecx, [ebp+arg_0]
		mov	eax, [ebp+var_8]
		mov	[ecx], eax
		mov	eax, [ebp+var_4]
		mov	[ecx+4], eax
		xor	eax, eax
		jmp	short loc_A1357E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1357B:				; CODE XREF: ApiSetpConstructPathToExtension+46j
					; ApiSetpConstructPathToExtension+56j
		mov	eax, [ebp+var_4]

loc_A1357E:				; CODE XREF: ApiSetpConstructPathToExtension+68j
		test	eax, eax
		jz	short loc_A1358A
		push	0
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1358A:				; CODE XREF: ApiSetpConstructPathToExtension+32j
					; ApiSetpConstructPathToExtension+6Fj
		pop	edi
		mov	eax, esi
		pop	esi
		leave
		retn	4
ApiSetpConstructPathToExtension	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


ApiSetpFindImageSection	proc near	; CODE XREF: ApiSetLoadSchemaEx(x,x,x)+31p
		mov	edi, edi
		push	ebx
		push	esi
		push	edi
		push	ecx
		call	_RtlImageNtHeader@4 ; RtlImageNtHeader(x)
		mov	edi, eax
		test	edi, edi
		jz	short loc_A135D6
		movzx	ecx, word ptr [edi+14h]
		lea	esi, [edi+18h]
		xor	eax, eax
		add	esi, ecx
		xor	ebx, ebx
		cmp	ax, [edi+6]
		jnb	short loc_A135D6

loc_A135B6:				; CODE XREF: ApiSetpFindImageSection+42j
		push	8		; size_t
		push	offset ??_C@_07LICFLFBF@?4apiset@NNGAKEGL@ ; char *
		push	esi		; char *
		call	_strncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A135DE
		movzx	eax, word ptr [edi+6]
		add	esi, 28h
		inc	ebx
		cmp	ebx, eax
		jb	short loc_A135B6

loc_A135D6:				; CODE XREF: ApiSetpFindImageSection+Fj
					; ApiSetpFindImageSection+22j
		xor	eax, eax

loc_A135D8:				; CODE XREF: ApiSetpFindImageSection+4Ej
		pop	edi
		pop	esi
		pop	ebx
		retn	4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A135DE:				; CODE XREF: ApiSetpFindImageSection+36j
		mov	eax, esi
		jmp	short loc_A135D8
ApiSetpFindImageSection	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

ApiSetpLoadSchemaExtension proc	near	; CODE XREF: ApiSetpLoadSchemaExtensions+6Dp

var_13C		= dword	ptr -13Ch
var_138		= dword	ptr -138h
var_134		= dword	ptr -134h
var_130		= dword	ptr -130h
var_12C		= dword	ptr -12Ch
var_128		= dword	ptr -128h
var_124		= dword	ptr -124h
var_120		= dword	ptr -120h
var_118		= dword	ptr -118h
var_114		= dword	ptr -114h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 140h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		mov	edi, edx
		push	10h
		pop	eax
		push	12h
		mov	word ptr [ebp+var_13C],	ax
		xor	edx, edx
		pop	eax
		mov	word ptr [ebp+var_13C+2], ax
		lea	eax, [ebp+var_134]
		push	eax
		push	114h
		lea	eax, [ebp+var_120]
		mov	[ebp+var_128], edx
		push	eax
		push	2
		lea	eax, [ebp+var_13C]
		mov	[ebp+var_124], edx
		push	eax
		push	ecx
		mov	[ebp+var_130], edx
		mov	[ebp+var_12C], edx
		mov	[ebp+var_138], offset ??_C@_1BC@PKFGPGJB@?$AAF?$AAi?$AAl?$AAe?$AAN?$AAa?$AAm?$AAe@NNGAKEGL@ ; "FileName"
		mov	[ebp+var_134], edx
		call	_ZwQueryValueKey@24 ; ZwQueryValueKey(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A136B8
		mov	edx, [ebp+var_118]
		lea	eax, [ebp+var_130]
		push	eax
		lea	ecx, [ebp+var_114]
		call	ApiSetpConstructPathToExtension
		mov	esi, eax
		test	esi, esi
		js	short loc_A136B8
		lea	eax, [ebp+var_124]
		push	eax
		lea	edx, [ebp+var_128]
		lea	ecx, [ebp+var_130]
		call	_ApiSetLoadSchemaEx@12 ; ApiSetLoadSchemaEx(x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A136B8
		push	[ebp+var_124]
		mov	edx, ebx
		mov	ecx, edi
		push	[ebp+var_128]
		call	_ApiSetComposeSchema@16	; ApiSetComposeSchema(x,x,x,x)
		mov	esi, eax

loc_A136B8:				; CODE XREF: ApiSetpLoadSchemaExtension+81j
					; ApiSetpLoadSchemaExtension+9Fj ...
		cmp	[ebp+var_12C], 0
		jz	short loc_A136CE
		push	0
		push	[ebp+var_12C]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A136CE:				; CODE XREF: ApiSetpLoadSchemaExtension+DDj
		mov	ecx, [ebp+var_4]
		mov	eax, esi
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	4
ApiSetpLoadSchemaExtension endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

ApiSetpLoadSchemaExtensions proc near	; CODE XREF: ApiSetLoadSchemaWithExtensions(x,x,x)+5Ap

var_244		= dword	ptr -244h
var_240		= dword	ptr -240h
var_23C		= dword	ptr -23Ch
var_238		= dword	ptr -238h
var_234		= dword	ptr -234h
var_230		= dword	ptr -230h
var_22C		= dword	ptr -22Ch
var_228		= dword	ptr -228h
var_224		= dword	ptr -224h
var_220		= dword	ptr -220h
var_18		= dword	ptr -18h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 234h
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+234h+var_4], eax
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	[esp+240h+var_228], eax
		mov	ebx, ecx
		lea	eax, [esp+240h+var_22C]
		mov	[esp+240h+var_224], edx
		push	eax
		xor	ecx, ecx
		lea	eax, [esp+244h+var_220]
		push	218h
		push	eax
		push	ecx
		mov	[esp+250h+var_230], ecx
		mov	edi, ecx
		mov	[esp+250h+var_22C], ecx
		push	ecx
		jmp	short loc_A13775
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1372C:				; CODE XREF: ApiSetpLoadSchemaExtensions+9Cj
		lea	eax, [esp+254h+var_244]
		mov	edx, ebx
		push	eax
		lea	ecx, [esp+258h+var_234]
		call	ApiSetpOpenSchemaExtensionNode
		mov	esi, eax
		test	esi, esi
		js	short loc_A1378B
		push	[esp+254h+var_23C]
		mov	edx, [esp+258h+var_238]
		mov	ecx, [esp+258h+var_244]
		call	ApiSetpLoadSchemaExtension
		push	[esp+254h+var_244]
		mov	esi, eax
		call	_ZwClose@4	; ZwClose(x)
		test	esi, esi
		js	short loc_A1378B
		lea	eax, [esp+254h+var_240]
		inc	edi
		push	eax
		push	218h
		lea	eax, [esp+25Ch+var_234]
		push	eax
		push	0
		push	edi

loc_A13775:				; CODE XREF: ApiSetpLoadSchemaExtensions+49j
		push	ebx
		call	_ZwEnumerateKey@24 ; ZwEnumerateKey(x,x,x,x,x,x)
		test	eax, eax
		jns	short loc_A1372C
		lea	esi, [eax+7FFFFFE6h]
		neg	esi
		sbb	esi, esi
		and	esi, eax

loc_A1378B:				; CODE XREF: ApiSetpLoadSchemaExtensions+5Fj
					; ApiSetpLoadSchemaExtensions+7Fj
		mov	ecx, [esp+254h+var_18]
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn	4
ApiSetpLoadSchemaExtensions endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

ApiSetpLoadSchemaImage proc near	; CODE XREF: ApiSetLoadSchemaEx(x,x,x)+20p

var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 4Ch
		push	ebx
		push	esi
		push	edi
		push	6
		xor	ebx, ebx
		mov	[ebp+var_48], 18h
		pop	ecx
		xor	eax, eax
		mov	[ebp+var_C], ebx
		push	ebx
		push	1
		lea	edi, [ebp+var_30]
		mov	[ebp+var_10], ebx
		rep stosd
		lea	eax, [ebp+var_18]
		mov	[ebp+var_18], ebx
		push	eax
		lea	eax, [ebp+var_48]
		mov	[ebp+var_14], ebx
		push	eax
		push	80000000h
		lea	eax, [ebp+var_8]
		mov	[ebp+var_44], ebx
		or	edi, 0FFFFFFFFh
		mov	[ebp+var_3C], 240h
		push	eax
		mov	[ebp+var_8], edi
		mov	[ebp+var_4], edi
		mov	[ebp+var_40], edx
		mov	[ebp+var_38], ebx
		mov	[ebp+var_34], ebx
		call	_ZwOpenFile@24	; ZwOpenFile(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A13872
		push	[ebp+var_8]
		lea	eax, [ebp+var_30]
		mov	[ebp+var_30], 18h
		push	8000000h
		push	2
		push	ebx
		push	eax
		push	4
		lea	eax, [ebp+var_4]
		mov	[ebp+var_2C], ebx
		push	eax
		mov	[ebp+var_24], 240h
		mov	[ebp+var_28], ebx
		mov	[ebp+var_20], ebx
		mov	[ebp+var_1C], ebx
		call	_ZwCreateSection@28 ; ZwCreateSection(x,x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A13872
		push	2
		push	ebx
		push	2
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		push	ebx
		push	ebx
		lea	eax, [ebp+var_C]
		push	eax
		push	edi
		push	[ebp+var_4]
		call	_ZwMapViewOfSection@40 ; ZwMapViewOfSection(x,x,x,x,x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A13872
		mov	ecx, [ebp+arg_0]
		mov	eax, [ebp+var_C]
		mov	[ecx], eax
		mov	ecx, [ebp+arg_4]
		mov	eax, [ebp+var_10]
		mov	[ecx], eax

loc_A13872:				; CODE XREF: ApiSetpLoadSchemaImage+63j
					; ApiSetpLoadSchemaImage+9Dj ...
		cmp	[ebp+var_4], edi
		jz	short loc_A1387F
		push	[ebp+var_4]
		call	_ZwClose@4	; ZwClose(x)

loc_A1387F:				; CODE XREF: ApiSetpLoadSchemaImage+D1j
		cmp	[ebp+var_8], edi
		jz	short loc_A1388C
		push	[ebp+var_8]
		call	_ZwClose@4	; ZwClose(x)

loc_A1388C:				; CODE XREF: ApiSetpLoadSchemaImage+DEj
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
ApiSetpLoadSchemaImage endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

ApiSetpOpenSchemaExtensionNode proc near ; CODE	XREF: ApiSetpLoadSchemaExtensions+56p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		push	esi
		lea	eax, [ecx+10h]
		mov	[ebp+var_24], 18h
		xor	esi, esi
		mov	[ebp+var_8], eax
		mov	ax, [ecx+0Ch]
		mov	[ebp+var_C], esi
		mov	word ptr [ebp+var_C], ax
		mov	word ptr [ebp+var_C+2],	ax
		lea	eax, [ebp+var_C]
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+var_24]
		push	eax
		push	20019h
		push	[ebp+arg_0]
		mov	[ebp+var_20], edx
		mov	[ebp+var_18], 240h
		mov	[ebp+var_14], esi
		mov	[ebp+var_10], esi
		call	_ZwOpenKey@12	; ZwOpenKey(x,x,x)
		pop	esi
		leave
		retn	4
ApiSetpOpenSchemaExtensionNode endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

ApiSetpOpenSchemaExtensionsRootNode proc near
					; CODE XREF: ApiSetLoadSchemaWithExtensions(x,x,x)+39p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		lea	eax, [ebp+var_8]
		mov	[ebp+var_8], 0B400B2h
		mov	[ebp+var_18], eax
		xor	edx, edx
		lea	eax, [ebp+var_20]
		mov	[ebp+var_4], offset ??_C@_1LE@LDGAKFIO@?$AA?2?$AAR?$AAe?$AAg?$AAi?$AAs?$AAt?$AAr?$AAy?$AA?2?$AAM?$AAa?$AAc?$AAh?$AAi@NNGAKEGL@
		push	eax
		push	8
		push	ecx
		mov	[ebp+var_20], 18h
		mov	[ebp+var_1C], edx
		mov	[ebp+var_14], 240h
		mov	[ebp+var_10], edx
		mov	[ebp+var_C], edx
		call	_ZwOpenKey@12	; ZwOpenKey(x,x,x)
		leave
		retn
ApiSetpOpenSchemaExtensionsRootNode endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall KIsSideloadingEnabled(x)
_KIsSideloadingEnabled@4 proc near	; CODE XREF: SepIsLockedDown(x,x)+25p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		push	74h
		pop	eax
		push	76h
		mov	word ptr [ebp+var_1C], ax
		mov	edi, ecx
		pop	eax
		push	26h
		mov	word ptr [ebp+var_1C+2], ax
		xor	ecx, ecx
		pop	eax
		push	28h
		mov	word ptr [ebp+var_C], ax
		mov	edx, offset ??_C@_1HG@FBAFABN@?$AA?2?$AAR?$AAe?$AAg?$AAi?$AAs?$AAt?$AAr?$AAy?$AA?2?$AAM?$AAa?$AAc?$AAh?$AAi@NNGAKEGL@
		pop	eax
		mov	word ptr [ebp+var_C+2],	ax
		mov	ebx, 0FFFFh
		lea	eax, [ebp+var_14]
		mov	[ebp+var_14], ecx
		mov	[ebp+var_10], ecx
		mov	[edi], cl
		mov	ecx, offset ??_C@_1BK@IJBLJGGE@?$AAA?$AAp?$AAp?$AAx?$AAP?$AAo?$AAl?$AAi?$AAc?$AAi?$AAe?$AAs@NNGAKEGL@ ;	"AppxPolicies"
		push	eax
		mov	[ebp+var_18], edx
		mov	[ebp+var_8], (offset loc_8C2059+1)
		mov	[ebp+var_4], ebx
		call	KGetAppModelStateSeparatedRegKeyPath
		mov	esi, eax
		test	esi, esi
		js	short loc_A139CA
		lea	eax, [ebp+var_4]
		push	eax
		lea	edx, [ebp+var_C]
		lea	ecx, [ebp+var_14]
		call	KGetUnlockSetting
		mov	esi, eax
		test	esi, esi
		js	short loc_A139CA
		call	_CmIsStateSeparationEnabled@0 ;	CmIsStateSeparationEnabled()
		test	al, al
		jz	short loc_A139BD
		cmp	[ebp+var_4], ebx
		jnz	short loc_A139BD
		lea	eax, [ebp+var_4]
		push	eax
		lea	edx, [ebp+var_C]
		lea	ecx, [ebp+var_1C]
		call	KGetUnlockSetting
		mov	esi, eax

loc_A139BD:				; CODE XREF: KIsSideloadingEnabled(x)+7Aj
					; KIsSideloadingEnabled(x)+7Fj
		test	esi, esi
		js	short loc_A139CA
		cmp	[ebp+var_4], 0
		jz	short loc_A139CA
		mov	byte ptr [edi],	1

loc_A139CA:				; CODE XREF: KIsSideloadingEnabled(x)+5Cj
					; KIsSideloadingEnabled(x)+71j	...
		lea	ecx, [ebp+var_14]
		call	_AppModelFreeUnicodeString@4 ; AppModelFreeUnicodeString(x)
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
_KIsSideloadingEnabled@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A139D9	proc near		; CODE XREF: sub_785212+206Bp

var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 64h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		mov	ebx, [ebp+arg_4]
		mov	eax, ecx
		push	esi
		push	edi
		xor	edi, edi
		mov	[ebp+var_38], edx
		mov	[ebp+var_44], eax
		mov	[ebp+var_60], edi
		mov	[ebp+var_4C], edi
		mov	[ebp+var_48], edi
		mov	[ebp+var_58], edi
		mov	[ebp+var_3C], edi
		mov	[ebp+var_54], edi
		mov	[ebp+var_34], edi
		mov	[ebp+var_50], edi
		test	eax, eax
		jnz	short loc_A13A21

loc_A13A17:				; CODE XREF: sub_A139D9+4Aj
					; sub_A139D9+105j ...
		mov	edx, 0C000000Dh
		jmp	loc_A13F4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13A21:				; CODE XREF: sub_A139D9+3Cj
		test	edx, edx
		jz	short loc_A13A17
		mov	edx, 0C000000Dh
		test	ebx, ebx
		jz	loc_A13F4F
		mov	ecx, [eax+8]
		mov	esi, edi
		mov	[ebp+var_2C], ecx
		test	ecx, ecx
		jz	loc_A13AD4
		cmp	dword ptr [eax], 3
		jbe	loc_A13AD4
		mov	eax, ecx

loc_A13A4D:				; CODE XREF: sub_A139D9+ACj
		mov	ecx, [eax]
		mov	[ebp+var_40], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13A5D
		xor	edx, edx
		jmp	short loc_A13A65
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13A5D:				; CODE XREF: sub_A139D9+7Ej
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13A65:				; CODE XREF: sub_A139D9+82j
		mov	[ebp+var_28], ecx
		test	edx, edx
		js	short loc_A13AAC
		mov	edx, [ebp+var_40]
		lea	eax, [ebp+var_28]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A13AAC
		mov	eax, [ebp+var_28]
		inc	edi
		cmp	edi, 3
		jb	short loc_A13A4D
		mov	edi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13A94
		xor	edx, edx
		jmp	short loc_A13A9C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13A94:				; CODE XREF: sub_A139D9+B5j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13A9C:				; CODE XREF: sub_A139D9+B9j
		test	edx, edx
		js	short loc_A13AAC
		mov	esi, edi
		mov	eax, edi
		neg	esi
		sbb	esi, esi
		and	esi, ecx
		jmp	short loc_A13AAE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13AAC:				; CODE XREF: sub_A139D9+91j
					; sub_A139D9+A3j ...
		mov	eax, esi

loc_A13AAE:				; CODE XREF: sub_A139D9+D1j
		test	edx, edx
		js	short loc_A13ACC
		cmp	eax, 8
		jz	short loc_A13AC1

loc_A13AB7:				; CODE XREF: sub_A139D9+425j
					; sub_A139D9+4B4j ...
		mov	edx, 0C0000023h
		jmp	loc_A13F4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13AC1:				; CODE XREF: sub_A139D9+DCj
		mov	eax, [esi]
		mov	[ebp+var_60], eax
		mov	eax, [esi+4]
		mov	[ebp+var_4C], eax

loc_A13ACC:				; CODE XREF: sub_A139D9+D7j
		mov	ecx, [ebp+var_2C]
		xor	edi, edi
		mov	eax, [ebp+var_44]

loc_A13AD4:				; CODE XREF: sub_A139D9+63j
					; sub_A139D9+6Cj
		test	edx, edx
		js	loc_A13F4F
		test	ecx, ecx
		jz	loc_A13A17
		mov	eax, [eax]
		mov	[ebp+var_44], eax
		cmp	eax, 4
		jbe	loc_A13A17
		mov	eax, ecx
		mov	esi, edi

loc_A13AF6:				; CODE XREF: sub_A139D9+159j
		mov	edi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13B03
		xor	edx, edx
		jmp	short loc_A13B0B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13B03:				; CODE XREF: sub_A139D9+124j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13B0B:				; CODE XREF: sub_A139D9+128j
		mov	[ebp+var_30], ecx
		test	edx, edx
		js	loc_A13F4F
		lea	eax, [ebp+var_30]
		mov	edx, edi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		mov	eax, [ebp+var_30]
		inc	esi
		cmp	esi, 4
		jb	short loc_A13AF6
		mov	esi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13B41
		xor	edx, edx
		jmp	short loc_A13B49
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13B41:				; CODE XREF: sub_A139D9+162j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13B49:				; CODE XREF: sub_A139D9+166j
		test	edx, edx
		js	loc_A13F4F
		mov	eax, esi
		mov	[ebp+var_58], esi
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_48], eax
		test	edx, edx
		js	loc_A13F4F
		cmp	[ebp+var_44], 5
		jbe	loc_A13A17
		mov	eax, [ebp+var_2C]
		xor	esi, esi

loc_A13B76:				; CODE XREF: sub_A139D9+1D1j
		mov	edi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13B83
		xor	edx, edx
		jmp	short loc_A13B8B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13B83:				; CODE XREF: sub_A139D9+1A4j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13B8B:				; CODE XREF: sub_A139D9+1A8j
		mov	[ebp+var_30], ecx
		test	edx, edx
		js	short loc_A13BD2
		lea	eax, [ebp+var_30]
		mov	edx, edi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A13BD2
		mov	eax, [ebp+var_30]
		inc	esi
		cmp	esi, 5
		jb	short loc_A13B76
		mov	esi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13BB9
		xor	edx, edx
		jmp	short loc_A13BC1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13BB9:				; CODE XREF: sub_A139D9+1DAj
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13BC1:				; CODE XREF: sub_A139D9+1DEj
		test	edx, edx
		js	short loc_A13BD2
		mov	edi, esi
		mov	[ebp+var_54], esi
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A13BD5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13BD2:				; CODE XREF: sub_A139D9+1B7j
					; sub_A139D9+1C8j ...
		mov	edi, [ebp+var_3C]

loc_A13BD5:				; CODE XREF: sub_A139D9+1F7j
		test	edx, edx
		js	loc_A13F4F
		cmp	[ebp+var_44], 6
		jbe	loc_A13A17
		mov	edx, [ebp+var_2C]
		xor	esi, esi

loc_A13BEC:				; CODE XREF: sub_A139D9+249j
		mov	eax, [edx]
		lea	ecx, [edx+4]
		cmp	ecx, edx
		jb	short loc_A13BF9
		xor	edx, edx
		jmp	short loc_A13C01
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13BF9:				; CODE XREF: sub_A139D9+21Aj
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13C01:				; CODE XREF: sub_A139D9+21Ej
		mov	[ebp+var_3C], ecx
		test	edx, edx
		js	short loc_A13C4D
		lea	edx, [ebp+var_3C]
		push	edx
		mov	edx, eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A13C4D
		inc	esi
		cmp	esi, 6
		jnb	short loc_A13C24
		mov	edx, [ebp+var_3C]
		jmp	short loc_A13BEC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13C24:				; CODE XREF: sub_A139D9+244j
		mov	eax, [ebp+var_3C]
		mov	esi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13C34
		xor	edx, edx
		jmp	short loc_A13C3C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13C34:				; CODE XREF: sub_A139D9+255j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13C3C:				; CODE XREF: sub_A139D9+259j
		test	edx, edx
		js	short loc_A13C4D
		mov	eax, esi
		mov	[ebp+var_50], esi
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		jmp	short loc_A13C50
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13C4D:				; CODE XREF: sub_A139D9+22Dj
					; sub_A139D9+23Ej ...
		mov	eax, [ebp+var_34]

loc_A13C50:				; CODE XREF: sub_A139D9+272j
		test	edx, edx
		js	loc_A13F4F
		cmp	ds:dword_A93EA0, 0
		jz	short loc_A13C7F
		push	20h
		lea	ecx, [ebp+var_24]
		push	ecx
		push	[ebp+var_50]
		push	eax
		push	[ebp+var_54]
		push	edi
		push	[ebp+var_58]
		push	[ebp+var_48]
		call	ds:dword_A93EDC
		mov	esi, eax
		jmp	short loc_A13C84
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13C7F:				; CODE XREF: sub_A139D9+286j
		mov	esi, 0C00000BBh

loc_A13C84:				; CODE XREF: sub_A139D9+2A4j
		mov	edx, esi
		test	esi, esi
		js	loc_A13F4F
		and	[ebp+var_28], 0
		lea	eax, [ebp+var_28]
		xor	ecx, ecx
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		mov	ecx, [ebp+var_28]
		lea	eax, [ebp+var_28]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		mov	ecx, [ebp+var_28]
		lea	eax, [ebp+var_28]
		push	eax
		push	24h
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		push	8
		pop	ecx
		xor	edi, edi
		mov	[ebp+var_5C], ecx
		mov	edx, [ebp+var_28]
		lea	eax, [ebp+var_5C]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		mov	eax, [ebp+var_5C]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A13D0E
		mov	edx, 0C0000095h
		jmp	short loc_A13D1B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13D0E:				; CODE XREF: sub_A139D9+32Cj
		lea	edi, [ecx+8]
		cmp	edi, ecx
		jb	loc_A13D9E
		xor	edx, edx

loc_A13D1B:				; CODE XREF: sub_A139D9+333j
		test	edx, edx
		js	loc_A13F4F
		mov	ecx, [ebp+var_38]
		mov	edx, edi
		push	4
		mov	eax, [ecx+10h]
		mov	[ebp+var_40], eax
		mov	eax, [ecx+8]
		mov	[ebp+var_38], eax
		lea	eax, [ebp+var_2C]
		pop	ecx
		push	eax
		mov	[ebp+var_2C], ecx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		mov	eax, [ebp+var_2C]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13D5B
		xor	edx, edx
		jmp	short loc_A13D63
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13D5B:				; CODE XREF: sub_A139D9+37Cj
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13D63:				; CODE XREF: sub_A139D9+380j
		mov	[ebp+var_2C], ecx
		test	edx, edx
		js	loc_A13F4F
		mov	edx, [ebp+var_38]
		lea	eax, [ebp+var_2C]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		mov	eax, [ebp+var_2C]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13D9E
		mov	edx, [ebp+var_40]
		lea	eax, [ebp+var_2C]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		jmp	short loc_A13DA3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13D9E:				; CODE XREF: sub_A139D9+33Aj
					; sub_A139D9+3B3j
		mov	edx, 0C0000095h

loc_A13DA3:				; CODE XREF: sub_A139D9+3C3j
		test	edx, edx
		js	loc_A13F4F
		mov	eax, [ebp+var_28]
		lea	edi, [ebx+4]
		mov	[edi], eax
		test	eax, eax
		jnz	short loc_A13DC1
		mov	edx, 0C000003Eh
		jmp	loc_A13F4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13DC1:				; CODE XREF: sub_A139D9+3DCj
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A13DDE
		mov	edx, 0C0000017h
		jmp	loc_A13F4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13DDE:				; CODE XREF: sub_A139D9+3F9j
		mov	[ebx+8], edx
		and	dword ptr [ebx], 0
		or	esi, 10000000h
		lea	eax, [edx+4]
		cmp	eax, edx
		jb	loc_A13F4A
		mov	ecx, [edi]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		ja	loc_A13AB7
		mov	dword ptr [edx], 4
		mov	[edx+4], esi
		inc	dword ptr [ebx]
		mov	ecx, [ebx]
		mov	[ebp+var_38], ecx
		mov	eax, [ebx+8]
		mov	[ebp+var_40], eax
		test	eax, eax
		jnz	short loc_A13E37
		mov	ecx, [edi]
		push	edi
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		inc	dword ptr [ebx]
		jmp	short loc_A13EAF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13E37:				; CODE XREF: sub_A139D9+443j
		and	[ebp+var_48], 0
		mov	esi, eax
		mov	[ebp+var_34], esi
		test	ecx, ecx
		jz	short loc_A13E76

loc_A13E44:				; CODE XREF: sub_A139D9+49Bj
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A13ED4
		lea	eax, [ebp+var_34]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		mov	ecx, [ebp+var_48]
		mov	esi, [ebp+var_34]
		inc	ecx
		mov	[ebp+var_48], ecx
		cmp	ecx, [ebp+var_38]
		jb	short loc_A13E44

loc_A13E76:				; CODE XREF: sub_A139D9+469j
		lea	eax, [esi+4]
		cmp	eax, esi
		jb	loc_A13F4A
		mov	ecx, [edi]
		lea	eax, [esi+0Ch]
		add	ecx, [ebp+var_40]
		xor	edx, edx
		cmp	eax, ecx
		ja	loc_A13AB7
		mov	eax, [ebp+var_60]
		mov	dword ptr [esi], 8
		mov	[esi+4], eax
		mov	eax, [ebp+var_4C]
		mov	[esi+8], eax
		inc	dword ptr [ebx]

loc_A13EA7:				; CODE XREF: sub_A139D9+500j
		test	edx, edx
		js	loc_A13F4F

loc_A13EAF:				; CODE XREF: sub_A139D9+45Cj
		mov	eax, [ebx+8]
		mov	[ebp+var_40], eax
		test	eax, eax
		jnz	short loc_A13EDB
		mov	ecx, [edi]
		push	edi
		push	24h
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A13F4F
		inc	dword ptr [ebx]
		xor	edx, edx
		jmp	short loc_A13F4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13ED4:				; CODE XREF: sub_A139D9+473j
		mov	edx, 0C0000095h
		jmp	short loc_A13EA7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13EDB:				; CODE XREF: sub_A139D9+4DEj
		mov	ecx, [ebx]
		mov	esi, eax
		and	[ebp+var_4C], 0
		mov	[ebp+var_34], esi
		mov	[ebp+var_38], ecx
		test	ecx, ecx
		jz	short loc_A13F1A

loc_A13EED:				; CODE XREF: sub_A139D9+53Cj
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A13F4A
		lea	eax, [ebp+var_34]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A13F4F
		mov	ecx, [ebp+var_4C]
		mov	esi, [ebp+var_34]
		inc	ecx
		mov	[ebp+var_4C], ecx
		cmp	ecx, [ebp+var_38]
		jb	short loc_A13EED
		mov	eax, [ebp+var_40]

loc_A13F1A:				; CODE XREF: sub_A139D9+512j
		lea	ecx, [esi+4]
		mov	[ebp+var_38], ecx
		cmp	ecx, esi
		jb	short loc_A13F4A
		mov	ecx, [edi]
		xor	edx, edx
		add	ecx, eax
		lea	eax, [esi+24h]
		cmp	eax, ecx
		ja	loc_A13AB7
		mov	edi, [ebp+var_38]
		mov	dword ptr [esi], 20h
		lea	esi, [ebp+var_24]
		push	8
		pop	ecx
		rep movsd
		inc	dword ptr [ebx]
		jmp	short loc_A13F4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13F4A:				; CODE XREF: sub_A139D9+416j
					; sub_A139D9+4A2j ...
		mov	edx, 0C0000095h

loc_A13F4F:				; CODE XREF: sub_A139D9+43j
					; sub_A139D9+53j ...
		mov	ecx, [ebp+var_4]
		mov	eax, edx
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	8
sub_A139D9	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A13F62	proc near		; CODE XREF: sub_785212+2081p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		and	[ebp+var_8], 0
		and	[ebp+var_1C], 0
		and	[ebp+var_20], 0
		and	[ebp+var_10], 0
		mov	eax, [ecx+8]
		push	ebx
		push	esi
		xor	esi, esi
		mov	[ebp+var_28], edx
		and	[ebp+var_4], esi
		mov	[ebp+var_14], ecx
		push	edi
		test	eax, eax
		jnz	short loc_A13F99

loc_A13F8F:				; CODE XREF: sub_A13F62+3Aj
		mov	ebx, 0C000000Dh
		jmp	loc_A1401D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13F99:				; CODE XREF: sub_A13F62+2Bj
		cmp	dword ptr [ecx], 3
		jbe	short loc_A13F8F
		xor	edi, edi

loc_A13FA0:				; CODE XREF: sub_A13F62+70j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13FAD
		xor	ebx, ebx
		jmp	short loc_A13FB5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13FAD:				; CODE XREF: sub_A13F62+45j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13FB5:				; CODE XREF: sub_A13F62+49j
		mov	[ebp+var_C], ecx
		test	ebx, ebx
		js	short loc_A13FF9
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A13FF9
		mov	eax, [ebp+var_C]
		inc	edi
		cmp	edi, 3
		jb	short loc_A13FA0
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A13FE1
		xor	ebx, ebx
		jmp	short loc_A13FE9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13FE1:				; CODE XREF: sub_A13F62+79j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A13FE9:				; CODE XREF: sub_A13F62+7Dj
		test	ebx, ebx
		js	short loc_A13FF9
		mov	esi, edx
		mov	eax, edx
		neg	esi
		sbb	esi, esi
		and	esi, ecx
		jmp	short loc_A13FFC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A13FF9:				; CODE XREF: sub_A13F62+58j
					; sub_A13F62+67j ...
		mov	eax, [ebp+var_4]

loc_A13FFC:				; CODE XREF: sub_A13F62+95j
		test	ebx, ebx
		js	short loc_A1401A
		cmp	eax, 8
		jz	short loc_A1400F

loc_A14005:				; CODE XREF: sub_A13F62+164j
		mov	ebx, 0C0000023h
		jmp	loc_A1453E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1400F:				; CODE XREF: sub_A13F62+A1j
		mov	eax, [esi]
		mov	[ebp+var_1C], eax
		mov	eax, [esi+4]
		mov	[ebp+var_20], eax

loc_A1401A:				; CODE XREF: sub_A13F62+9Cj
		mov	ecx, [ebp+var_14]

loc_A1401D:				; CODE XREF: sub_A13F62+32j
		test	ebx, ebx
		js	loc_A1453E
		mov	eax, [ecx+8]
		xor	esi, esi
		and	[ebp+var_4], esi
		test	eax, eax
		jnz	short loc_A14058

loc_A14031:				; CODE XREF: sub_A13F62+F9j
		mov	ebx, 0C000000Dh

loc_A14036:				; CODE XREF: sub_A13F62+15Bj
		mov	eax, [ebp+var_10]

loc_A14039:				; CODE XREF: sub_A13F62+16Cj
		test	ebx, ebx
		js	loc_A1453E
		mov	ecx, 800h
		cmp	eax, ecx
		jz	loc_A140D3
		mov	ebx, 0C000003Eh
		jmp	loc_A1453E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14058:				; CODE XREF: sub_A13F62+CDj
		cmp	dword ptr [ecx], 4
		jbe	short loc_A14031
		xor	edi, edi

loc_A1405F:				; CODE XREF: sub_A13F62+12Fj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1406C
		xor	ebx, ebx
		jmp	short loc_A14074
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1406C:				; CODE XREF: sub_A13F62+104j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14074:				; CODE XREF: sub_A13F62+108j
		mov	[ebp+var_C], ecx
		test	ebx, ebx
		js	short loc_A140B8
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A140B8
		mov	eax, [ebp+var_C]
		inc	edi
		cmp	edi, 4
		jb	short loc_A1405F
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A140A0
		xor	ebx, ebx
		jmp	short loc_A140A8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A140A0:				; CODE XREF: sub_A13F62+138j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A140A8:				; CODE XREF: sub_A13F62+13Cj
		test	ebx, ebx
		js	short loc_A140B8
		mov	esi, edx
		mov	eax, edx
		neg	esi
		sbb	esi, esi
		and	esi, ecx
		jmp	short loc_A140BB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A140B8:				; CODE XREF: sub_A13F62+117j
					; sub_A13F62+126j ...
		mov	eax, [ebp+var_4]

loc_A140BB:				; CODE XREF: sub_A13F62+154j
		test	ebx, ebx
		js	loc_A14036
		cmp	eax, 4
		jnz	loc_A14005
		mov	eax, [esi]
		jmp	loc_A14039
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A140D3:				; CODE XREF: sub_A13F62+E6j
		push	20534C53h
		push	ecx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	ecx, eax
		mov	[ebp+var_24], ecx
		test	ecx, ecx
		jnz	short loc_A140F3
		mov	ebx, 0C0000017h
		jmp	loc_A1453E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A140F3:				; CODE XREF: sub_A13F62+185j
		mov	eax, ds:dword_A93ED8
		test	eax, eax
		jz	short loc_A14101
		push	ecx
		call	eax
		jmp	short loc_A14106
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14101:				; CODE XREF: sub_A13F62+198j
		mov	eax, 0C00000BBh

loc_A14106:				; CODE XREF: sub_A13F62+19Dj
		mov	[ebp+var_C], eax
		mov	ebx, eax
		test	eax, eax
		js	loc_A14531
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		xor	ecx, ecx
		push	eax
		push	8
		pop	edi
		mov	edx, edi
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A14175
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A14175
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		mov	edx, 804h
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A14175
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		mov	edx, edi
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A14175
		mov	eax, [ebp+var_4]
		mov	[ebp+var_8], eax
		jmp	short loc_A14178
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14175:				; CODE XREF: sub_A13F62+1C9j
					; sub_A13F62+1DEj ...
		mov	eax, [ebp+var_8]

loc_A14178:				; CODE XREF: sub_A13F62+211j
		test	ebx, ebx
		js	loc_A14531
		xor	esi, esi
		mov	[ebp+var_18], edi
		lea	ecx, [ebp+var_18]
		mov	edx, eax
		push	ecx
		mov	ecx, edi
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A14531
		mov	eax, [ebp+var_18]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A141B0
		mov	ebx, 0C0000095h
		jmp	short loc_A141BD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A141B0:				; CODE XREF: sub_A13F62+245j
		lea	esi, [ecx+8]
		cmp	esi, ecx
		jb	loc_A1423C
		xor	ebx, ebx

loc_A141BD:				; CODE XREF: sub_A13F62+24Cj
		test	ebx, ebx
		js	loc_A14531
		mov	edi, [ebp+var_28]
		mov	edx, esi
		push	4
		pop	ecx
		mov	[ebp+var_4], ecx
		mov	eax, [edi+10h]
		mov	edi, [edi+8]
		mov	[ebp+var_28], eax
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A14531
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A141FA
		xor	ebx, ebx
		jmp	short loc_A14202
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A141FA:				; CODE XREF: sub_A13F62+292j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14202:				; CODE XREF: sub_A13F62+296j
		mov	[ebp+var_4], ecx
		test	ebx, ebx
		js	loc_A14531
		lea	eax, [ebp+var_4]
		mov	edx, edi
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A14531
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1423C
		mov	edx, [ebp+var_28]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		jmp	short loc_A14241
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1423C:				; CODE XREF: sub_A13F62+253j
					; sub_A13F62+2C8j
		mov	ebx, 0C0000095h

loc_A14241:				; CODE XREF: sub_A13F62+2D8j
		test	ebx, ebx
		js	loc_A14531
		mov	esi, [ebp+arg_4]
		test	esi, esi
		jnz	short loc_A1425A
		mov	ebx, 0C000000Dh
		jmp	loc_A14531
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1425A:				; CODE XREF: sub_A13F62+2ECj
		mov	eax, [ebp+var_8]
		lea	edi, [esi+4]
		xor	ebx, ebx
		mov	[ebp+var_4], edi
		mov	[edi], eax
		test	eax, eax
		jnz	short loc_A14272
		mov	ebx, 0C000003Eh
		jmp	short loc_A1428F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14272:				; CODE XREF: sub_A13F62+307j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		test	eax, eax
		jnz	short loc_A1428A
		mov	ebx, 0C0000017h
		jmp	short loc_A1428F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1428A:				; CODE XREF: sub_A13F62+31Fj
		mov	[esi+8], eax
		and	[esi], ebx

loc_A1428F:				; CODE XREF: sub_A13F62+30Ej
					; sub_A13F62+326j
		test	ebx, ebx
		js	loc_A14531
		mov	eax, [esi+8]
		or	[ebp+var_C], 10000000h
		mov	[ebp+var_8], eax
		test	eax, eax
		jnz	short loc_A142C4
		mov	ecx, [edi]
		push	edi
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A14531
		inc	dword ptr [esi]
		jmp	loc_A14345
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A142C4:				; CODE XREF: sub_A13F62+344j
		mov	ecx, [esi]
		mov	edi, eax
		and	[ebp+var_14], 0
		mov	[ebp+var_10], edi
		mov	[ebp+var_28], ecx
		test	ecx, ecx
		jz	short loc_A14303

loc_A142D6:				; CODE XREF: sub_A13F62+39Cj
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A14326
		lea	eax, [ebp+var_10]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1433A
		mov	ecx, [ebp+var_14]
		mov	edi, [ebp+var_10]
		inc	ecx
		mov	[ebp+var_14], ecx
		cmp	ecx, [ebp+var_28]
		jb	short loc_A142D6
		mov	eax, [ebp+var_8]

loc_A14303:				; CODE XREF: sub_A13F62+372j
		lea	edx, [edi+4]
		cmp	edx, edi
		jb	loc_A1452C
		mov	ecx, [esi+4]
		xor	ebx, ebx
		add	ecx, eax
		lea	eax, [edi+8]
		cmp	eax, ecx
		jbe	short loc_A1432D

loc_A1431C:				; CODE XREF: sub_A13F62+460j
					; sub_A13F62+512j ...
		mov	ebx, 0C0000023h
		jmp	loc_A14531
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14326:				; CODE XREF: sub_A13F62+37Cj
		mov	ebx, 0C0000095h
		jmp	short loc_A1433A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1432D:				; CODE XREF: sub_A13F62+3B8j
		mov	eax, [ebp+var_C]
		mov	dword ptr [edi], 4
		mov	[edx], eax
		inc	dword ptr [esi]

loc_A1433A:				; CODE XREF: sub_A13F62+38Dj
					; sub_A13F62+3C9j
		lea	edi, [esi+4]
		test	ebx, ebx
		js	loc_A14531

loc_A14345:				; CODE XREF: sub_A13F62+35Dj
		mov	eax, [esi+8]
		mov	[ebp+var_C], eax
		test	eax, eax
		jnz	short loc_A14368
		mov	ecx, [edi]
		push	edi
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A14531
		inc	dword ptr [esi]
		jmp	short loc_A143E6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14368:				; CODE XREF: sub_A13F62+3EBj
		mov	ecx, [esi]
		mov	edi, eax
		and	[ebp+var_14], 0
		mov	[ebp+var_10], edi
		mov	[ebp+var_28], ecx
		test	ecx, ecx
		jz	short loc_A143AB

loc_A1437A:				; CODE XREF: sub_A13F62+444j
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A1440E
		lea	eax, [ebp+var_10]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A143DB
		mov	ecx, [ebp+var_14]
		mov	edi, [ebp+var_10]
		inc	ecx
		mov	[ebp+var_14], ecx
		cmp	ecx, [ebp+var_28]
		jb	short loc_A1437A
		mov	eax, [ebp+var_C]

loc_A143AB:				; CODE XREF: sub_A13F62+416j
		lea	edx, [edi+4]
		cmp	edx, edi
		jb	loc_A1452C
		mov	ecx, [esi+4]
		xor	ebx, ebx
		add	ecx, eax
		lea	eax, [edi+0Ch]
		cmp	eax, ecx
		ja	loc_A1431C
		mov	eax, [ebp+var_1C]
		mov	dword ptr [edi], 8
		mov	[edx], eax
		mov	eax, [ebp+var_20]
		mov	[edx+4], eax
		inc	dword ptr [esi]

loc_A143DB:				; CODE XREF: sub_A13F62+435j
					; sub_A13F62+4B1j
		lea	edi, [esi+4]
		test	ebx, ebx
		js	loc_A14531

loc_A143E6:				; CODE XREF: sub_A13F62+404j
		mov	eax, [esi+8]
		mov	[ebp+var_1C], eax
		test	eax, eax
		jnz	short loc_A14415
		mov	ecx, [edi]
		mov	edx, 804h
		push	edi
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A14531
		inc	dword ptr [esi]
		jmp	loc_A1449C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1440E:				; CODE XREF: sub_A13F62+420j
		mov	ebx, 0C0000095h
		jmp	short loc_A143DB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14415:				; CODE XREF: sub_A13F62+48Cj
		mov	ecx, [esi]
		mov	edi, eax
		and	[ebp+var_20], 0
		mov	[ebp+var_10], edi
		mov	[ebp+var_28], ecx
		test	ecx, ecx
		jz	short loc_A14458

loc_A14427:				; CODE XREF: sub_A13F62+4F1j
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A144BD
		lea	eax, [ebp+var_10]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A14491
		mov	ecx, [ebp+var_20]
		mov	edi, [ebp+var_10]
		inc	ecx
		mov	[ebp+var_20], ecx
		cmp	ecx, [ebp+var_28]
		jb	short loc_A14427
		mov	eax, [ebp+var_1C]

loc_A14458:				; CODE XREF: sub_A13F62+4C3j
		lea	edx, [edi+4]
		cmp	edx, edi
		jb	loc_A1452C
		mov	ecx, [ebp+var_4]
		xor	ebx, ebx
		mov	ecx, [ecx]
		add	ecx, eax
		lea	eax, [edi+804h]
		cmp	eax, ecx
		ja	loc_A1431C
		mov	esi, [ebp+var_24]
		mov	ecx, 200h
		mov	dword ptr [edi], 800h
		mov	edi, edx
		rep movsd
		mov	esi, [ebp+arg_4]
		inc	dword ptr [esi]

loc_A14491:				; CODE XREF: sub_A13F62+4E2j
					; sub_A13F62+560j
		lea	edi, [esi+4]
		test	ebx, ebx
		js	loc_A14531

loc_A1449C:				; CODE XREF: sub_A13F62+4A7j
		mov	eax, [esi+8]
		mov	[ebp+var_1C], eax
		test	eax, eax
		jnz	short loc_A144C4
		mov	ecx, [edi]
		push	edi
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A14531
		inc	dword ptr [esi]
		xor	ebx, ebx
		jmp	short loc_A14531
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A144BD:				; CODE XREF: sub_A13F62+4CDj
		mov	ebx, 0C0000095h
		jmp	short loc_A14491
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A144C4:				; CODE XREF: sub_A13F62+542j
		mov	ecx, [esi]
		mov	edi, eax
		and	[ebp+var_20], 0
		mov	[ebp+arg_4], edi
		mov	[ebp+var_28], ecx
		test	ecx, ecx
		jz	short loc_A14503

loc_A144D6:				; CODE XREF: sub_A13F62+59Cj
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A1452C
		lea	eax, [ebp+arg_4]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A14531
		mov	ecx, [ebp+var_20]
		mov	edi, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_20], ecx
		cmp	ecx, [ebp+var_28]
		jb	short loc_A144D6
		mov	eax, [ebp+var_1C]

loc_A14503:				; CODE XREF: sub_A13F62+572j
		lea	edx, [edi+4]
		cmp	edx, edi
		jb	short loc_A1452C
		mov	ecx, [esi+4]
		xor	ebx, ebx
		add	ecx, eax
		lea	eax, [edi+8]
		cmp	eax, ecx
		ja	loc_A1431C
		mov	dword ptr [edi], 4
		mov	dword ptr [edx], 800h
		inc	dword ptr [esi]
		jmp	short loc_A14531
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1452C:				; CODE XREF: sub_A13F62+3A6j
					; sub_A13F62+44Ej ...
		mov	ebx, 0C0000095h

loc_A14531:				; CODE XREF: sub_A13F62+1ABj
					; sub_A13F62+218j ...
		push	20534C53h
		push	[ebp+var_24]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1453E:				; CODE XREF: sub_A13F62+A8j
					; sub_A13F62+BDj ...
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	8
sub_A13F62	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A14547	proc near		; CODE XREF: sub_785212+1074p

var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_4		= dword	ptr  0Ch

		push	48h
		push	offset dword_6AAAB8
		call	__SEH_prolog4
		mov	[ebp+var_3C], edx
		xor	edi, edi
		mov	[ebp+var_58], edi
		mov	[ebp+var_54], edi
		mov	edx, edi
		mov	[ebp+var_28], edx
		mov	[ebp+var_48], edx
		test	ecx, ecx
		jnz	short loc_A14574

loc_A1456A:				; CODE XREF: sub_A14547+30j
					; sub_A14547+35j
		mov	esi, 0C000000Dh
		jmp	loc_A14984
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14574:				; CODE XREF: sub_A14547+21j
		cmp	[ebp+var_3C], edx
		jz	short loc_A1456A
		cmp	[ebp+arg_4], edx
		jz	short loc_A1456A
		mov	ebx, edi
		mov	[ebp+var_44], ebx
		mov	eax, edi
		mov	[ebp+var_40], eax
		mov	[ebp+var_1C], edi
		mov	edx, [ecx+8]
		test	edx, edx
		jnz	short loc_A14599

loc_A14592:				; CODE XREF: sub_A14547+55j
		mov	esi, 0C000000Dh
		jmp	short loc_A14614
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14599:				; CODE XREF: sub_A14547+49j
		cmp	dword ptr [ecx], 3
		jbe	short loc_A14592
		mov	[ebp+var_1C], edx
		mov	[ebp+var_24], edi

loc_A145A4:				; CODE XREF: sub_A14547+95j
		mov	eax, [ebp+var_1C]
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A145B4
		mov	esi, edi
		jmp	short loc_A145BC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A145B4:				; CODE XREF: sub_A14547+67j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A145BC:				; CODE XREF: sub_A14547+6Bj
		mov	[ebp+var_1C], ecx
		test	esi, esi
		js	short loc_A14612
		lea	eax, [ebp+var_1C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A14612
		mov	edx, [ebp+var_24]
		inc	edx
		mov	[ebp+var_24], edx
		cmp	edx, 3
		jb	short loc_A145A4
		mov	eax, [ebp+var_1C]
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A145EE
		mov	esi, edi
		jmp	short loc_A145F6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A145EE:				; CODE XREF: sub_A14547+A1j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A145F6:				; CODE XREF: sub_A14547+A5j
		mov	[ebp+var_1C], ecx
		test	esi, esi
		js	short loc_A14612
		mov	eax, edx
		mov	[ebp+var_40], eax
		mov	ebx, edx
		neg	ebx
		sbb	ebx, ebx
		and	ebx, ecx
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_44], ebx
		jmp	short loc_A14614
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14612:				; CODE XREF: sub_A14547+7Aj
					; sub_A14547+89j ...
		mov	eax, edi

loc_A14614:				; CODE XREF: sub_A14547+50j
					; sub_A14547+C9j
		test	esi, esi
		js	loc_A14984
		cmp	eax, 8
		jz	short loc_A14628
		mov	esi, 0C0000023h
		jmp	short loc_A14633
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14628:				; CODE XREF: sub_A14547+D8j
		mov	eax, [ebx]
		mov	[ebp+var_58], eax
		mov	eax, [ebx+4]
		mov	[ebp+var_54], eax

loc_A14633:				; CODE XREF: sub_A14547+DFj
		test	esi, esi
		js	loc_A14984
		mov	[ebp+ms_exc.disabled], edi
		push	edi
		push	offset unk_6B72E0
		call	_KeReleaseMutex@8 ; KeReleaseMutex(x,x)
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A14697
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14652:				; DATA XREF: .text:006AAACCo
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_4C], eax
		mov	[ebp+var_2C], eax
		cmp	[ebp+var_2C], 80h
		jz	short loc_A1467A
		cmp	[ebp+var_2C], 0C0000046h
		jz	short loc_A1467A
		mov	[ebp+var_30], 0
		jmp	short loc_A14681
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1467A:				; CODE XREF: sub_A14547+11Fj
					; sub_A14547+128j
		mov	[ebp+var_30], 1

loc_A14681:				; CODE XREF: sub_A14547+131j
		mov	eax, [ebp+var_30]
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14685:				; DATA XREF: .text:006AAAD0o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		xor	edi, edi
		mov	edx, [ebp+var_48]
		mov	[ebp+var_28], edx

loc_A14697:				; CODE XREF: sub_A14547+109j
		mov	ebx, 0C0000095h
		mov	[ebp+var_34], 8
		lea	eax, [ebp+var_34]
		push	eax
		push	0Ch
		pop	edx
		push	8
		pop	ecx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A146C0
		mov	eax, [ebp+var_34]
		mov	[ebp+var_28], eax
		jmp	short loc_A146C3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A146C0:				; CODE XREF: sub_A14547+16Fj
		mov	eax, [ebp+var_28]

loc_A146C3:				; CODE XREF: sub_A14547+177j
		test	esi, esi
		js	loc_A14984
		push	8
		pop	ecx
		mov	[ebp+var_38], ecx
		lea	edx, [ebp+var_38]
		push	edx
		mov	edx, eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A14984
		mov	esi, edi
		mov	eax, [ebp+var_38]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A146F9
		mov	esi, ebx
		mov	ecx, edi

loc_A146F9:				; CODE XREF: sub_A14547+1ACj
		test	esi, esi
		js	short loc_A14717
		lea	eax, [ecx+8]
		cmp	eax, ecx
		jb	short loc_A14708
		mov	edx, eax
		jmp	short loc_A1470B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14708:				; CODE XREF: sub_A14547+1BBj
		or	edx, 0FFFFFFFFh

loc_A1470B:				; CODE XREF: sub_A14547+1BFj
		cmp	eax, ecx
		sbb	esi, esi
		and	esi, ebx
		cmp	eax, ecx
		mov	ecx, edx
		jnb	short loc_A14719

loc_A14717:				; CODE XREF: sub_A14547+1B4j
		mov	ecx, edi

loc_A14719:				; CODE XREF: sub_A14547+1CEj
		test	esi, esi
		js	loc_A14984
		mov	eax, [ebp+var_3C]
		mov	edx, [eax+10h]
		mov	[ebp+var_3C], edx
		mov	eax, [eax+8]
		mov	[ebp+var_48], eax
		push	4
		pop	eax
		mov	[ebp+var_20], eax
		lea	edx, [ebp+var_20]
		push	edx
		mov	edx, ecx
		mov	ecx, eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A14984
		mov	eax, [ebp+var_20]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1475B
		mov	esi, edi
		jmp	short loc_A14760
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1475B:				; CODE XREF: sub_A14547+20Ej
		mov	esi, ebx
		or	ecx, 0FFFFFFFFh

loc_A14760:				; CODE XREF: sub_A14547+212j
		mov	[ebp+var_20], ecx
		test	esi, esi
		js	loc_A14984
		lea	eax, [ebp+var_20]
		push	eax
		mov	edx, [ebp+var_48]
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A14984
		mov	eax, [ebp+var_20]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1478F
		mov	esi, edi
		jmp	short loc_A14794
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1478F:				; CODE XREF: sub_A14547+242j
		mov	esi, ebx
		or	ecx, 0FFFFFFFFh

loc_A14794:				; CODE XREF: sub_A14547+246j
		test	esi, esi
		js	loc_A14984
		lea	eax, [ebp+var_20]
		push	eax
		mov	edx, [ebp+var_3C]
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A14984
		mov	ebx, [ebp+arg_4]
		lea	eax, [ebx+4]
		mov	edx, [ebp+var_28]
		mov	[eax], edx
		mov	esi, edi
		test	edx, edx
		jnz	short loc_A147CA
		mov	esi, 0C000003Eh
		jmp	short loc_A147EA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A147CA:				; CODE XREF: sub_A14547+27Aj
		push	20534C53h
		push	edx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		test	eax, eax
		jnz	short loc_A147E2
		mov	esi, 0C0000017h
		jmp	short loc_A147E7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A147E2:				; CODE XREF: sub_A14547+292j
		mov	[ebx+8], eax
		mov	[ebx], edi

loc_A147E7:				; CODE XREF: sub_A14547+299j
		lea	eax, [ebx+4]

loc_A147EA:				; CODE XREF: sub_A14547+281j
		test	esi, esi
		js	loc_A14984
		mov	edx, edi
		mov	[ebp+var_3C], edx
		mov	ecx, [ebx+8]
		mov	[ebp+var_34], ecx
		test	ecx, ecx
		jnz	short loc_A1481D
		push	eax
		push	8
		pop	edx
		mov	ecx, [eax]
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A14984
		mov	esi, edi
		jmp	loc_A148B4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1481D:				; CODE XREF: sub_A14547+2B8j
		mov	[ebp+var_24], ecx
		mov	[ebp+arg_4], edi
		mov	eax, [ebx]
		mov	[ebp+var_48], eax
		test	eax, eax
		jz	short loc_A14874

loc_A1482C:				; CODE XREF: sub_A14547+32Bj
		mov	eax, [ebp+var_24]
		mov	eax, [eax]
		add	eax, 4
		cmp	eax, 4
		jb	short loc_A14842
		mov	edx, eax
		mov	[ebp+var_3C], edx
		mov	esi, edi
		jmp	short loc_A14847
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14842:				; CODE XREF: sub_A14547+2F0j
		mov	esi, 0C0000095h

loc_A14847:				; CODE XREF: sub_A14547+2F9j
		test	esi, esi
		js	loc_A14984
		lea	eax, [ebp+var_24]
		push	eax
		mov	ecx, [ebp+var_24]
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A14984
		mov	ecx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+arg_4], ecx
		cmp	ecx, [ebp+var_48]
		mov	edx, [ebp+var_3C]
		jb	short loc_A1482C

loc_A14874:				; CODE XREF: sub_A14547+2E3j
		mov	eax, [ebp+var_24]
		lea	edx, [eax+4]
		cmp	edx, eax
		jb	short loc_A14882
		mov	esi, edi
		jmp	short loc_A1488A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14882:				; CODE XREF: sub_A14547+335j
		or	edx, 0FFFFFFFFh
		mov	esi, 0C0000095h

loc_A1488A:				; CODE XREF: sub_A14547+339j
		test	esi, esi
		js	loc_A14984
		mov	ecx, [ebx+4]
		add	ecx, [ebp+var_34]
		mov	eax, [ebp+var_24]
		add	eax, 8
		cmp	eax, ecx
		jbe	short loc_A148A9
		mov	esi, 0C0000023h
		jmp	short loc_A148B6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A148A9:				; CODE XREF: sub_A14547+359j
		mov	eax, [ebp+var_24]
		mov	dword ptr [eax], 4
		mov	[edx], edi

loc_A148B4:				; CODE XREF: sub_A14547+2D1j
		inc	dword ptr [ebx]

loc_A148B6:				; CODE XREF: sub_A14547+360j
		test	esi, esi
		js	loc_A14984
		mov	ecx, edi
		mov	[ebp+var_3C], ecx
		mov	eax, [ebx+8]
		mov	[ebp+var_34], eax
		test	eax, eax
		jnz	short loc_A148EC
		lea	eax, [ebx+4]
		push	eax
		push	0Ch
		pop	edx
		mov	ecx, [eax]
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A14984
		mov	esi, edi
		jmp	loc_A14982
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A148EC:				; CODE XREF: sub_A14547+384j
		mov	[ebp+var_28], eax
		mov	[ebp+arg_4], edi
		mov	eax, [ebx]
		mov	[ebp+var_48], eax
		test	eax, eax
		jz	short loc_A1493D

loc_A148FB:				; CODE XREF: sub_A14547+3F4j
		mov	eax, [ebp+var_28]
		mov	eax, [eax]
		add	eax, 4
		cmp	eax, 4
		jb	short loc_A14911
		mov	ecx, eax
		mov	[ebp+var_3C], ecx
		mov	esi, edi
		jmp	short loc_A14916
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14911:				; CODE XREF: sub_A14547+3BFj
		mov	esi, 0C0000095h

loc_A14916:				; CODE XREF: sub_A14547+3C8j
		test	esi, esi
		js	short loc_A14984
		lea	eax, [ebp+var_28]
		push	eax
		mov	edx, ecx
		mov	ecx, [ebp+var_28]
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A14984
		mov	ecx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+arg_4], ecx
		cmp	ecx, [ebp+var_48]
		mov	ecx, [ebp+var_3C]
		jb	short loc_A148FB

loc_A1493D:				; CODE XREF: sub_A14547+3B2j
		mov	eax, [ebp+var_28]
		lea	edx, [eax+4]
		cmp	edx, eax
		jb	short loc_A1494B
		mov	esi, edi
		jmp	short loc_A14953
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1494B:				; CODE XREF: sub_A14547+3FEj
		or	edx, 0FFFFFFFFh
		mov	esi, 0C0000095h

loc_A14953:				; CODE XREF: sub_A14547+402j
		test	esi, esi
		js	short loc_A14984
		mov	ecx, [ebx+4]
		add	ecx, [ebp+var_34]
		mov	eax, [ebp+var_28]
		add	eax, 0Ch
		cmp	eax, ecx
		jbe	short loc_A1496E
		mov	esi, 0C0000023h
		jmp	short loc_A14984
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1496E:				; CODE XREF: sub_A14547+41Ej
		mov	eax, [ebp+var_28]
		mov	dword ptr [eax], 8
		mov	ecx, [ebp+var_58]
		mov	[edx], ecx
		mov	ecx, [ebp+var_54]
		mov	[edx+4], ecx

loc_A14982:				; CODE XREF: sub_A14547+3A0j
		inc	dword ptr [ebx]

loc_A14984:				; CODE XREF: sub_A14547+28j
					; sub_A14547+CFj ...
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A14547	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A14998	proc near		; CODE XREF: sub_785212+1B4Fp

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	ebx
		mov	eax, edx
		mov	[ebp+var_10], ecx
		xor	edx, edx
		mov	[ebp+var_28], eax
		mov	[ebp+var_8], edx
		mov	[ebp+var_1C], edx
		mov	[ebp+var_20], edx
		mov	[ebp+var_14], edx
		push	esi
		push	edi
		mov	edi, edx
		test	eax, eax
		jnz	short loc_A149C9

loc_A149BF:				; CODE XREF: sub_A14998+36j
					; sub_A14998+EEj ...
		mov	edx, 0C000000Dh
		jmp	loc_A14D0E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A149C9:				; CODE XREF: sub_A14998+25j
		mov	ebx, [ebp+arg_4]
		test	ebx, ebx
		jz	short loc_A149BF
		mov	eax, [ecx+8]
		mov	esi, edx
		mov	[ebp+var_C], edx
		test	eax, eax
		jnz	short loc_A149E6

loc_A149DC:				; CODE XREF: sub_A14998+51j
		mov	edx, 0C000000Dh
		jmp	loc_A14A79
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A149E6:				; CODE XREF: sub_A14998+42j
		cmp	dword ptr [ecx], 3
		jbe	short loc_A149DC
		mov	[ebp+var_4], edx

loc_A149EE:				; CODE XREF: sub_A14998+94j
		mov	ecx, [eax]
		mov	[ebp+var_24], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jnb	short loc_A14A02
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14A02:				; CODE XREF: sub_A14998+60j
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	short loc_A14A76
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A14A76
		mov	edx, [ebp+var_4]
		mov	eax, [ebp+arg_4]
		inc	edx
		mov	[ebp+var_4], edx
		cmp	edx, 3
		jnb	short loc_A14A2E
		xor	edx, edx
		jmp	short loc_A149EE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14A2E:				; CODE XREF: sub_A14998+90j
		mov	ecx, [eax]
		mov	[ebp+arg_4], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A14A3E
		xor	edx, edx
		jmp	short loc_A14A46
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14A3E:				; CODE XREF: sub_A14998+A0j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14A46:				; CODE XREF: sub_A14998+A4j
		test	edx, edx
		js	short loc_A14A76
		mov	eax, [ebp+arg_4]
		mov	esi, eax
		neg	esi
		mov	[ebp+var_C], eax
		sbb	esi, esi
		and	esi, ecx
		test	edx, edx
		js	short loc_A14A76
		cmp	eax, 8
		jz	short loc_A14A6B

loc_A14A61:				; CODE XREF: sub_A14998+2D2j
					; sub_A14998+355j
		mov	edx, 0C0000023h
		jmp	loc_A14D0E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14A6B:				; CODE XREF: sub_A14998+C7j
		mov	eax, [esi]
		mov	[ebp+var_1C], eax
		mov	eax, [esi+4]
		mov	[ebp+var_20], eax

loc_A14A76:				; CODE XREF: sub_A14998+6Fj
					; sub_A14998+81j ...
		mov	ecx, [ebp+var_10]

loc_A14A79:				; CODE XREF: sub_A14998+49j
		test	edx, edx
		js	loc_A14D0E
		mov	eax, [ecx+8]
		test	eax, eax
		jz	loc_A149BF
		cmp	dword ptr [ecx], 4
		jbe	loc_A149BF
		xor	esi, esi

loc_A14A97:				; CODE XREF: sub_A14998+13Fj
		mov	ecx, [eax]
		mov	[ebp+var_24], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A14AA7
		xor	edx, edx
		jmp	short loc_A14AAF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14AA7:				; CODE XREF: sub_A14998+109j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14AAF:				; CODE XREF: sub_A14998+10Dj
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	loc_A14D0E
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A14D0E
		mov	eax, [ebp+arg_4]
		inc	esi
		cmp	esi, 4
		jb	short loc_A14A97
		mov	esi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A14AE6
		xor	edx, edx
		jmp	short loc_A14AEE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14AE6:				; CODE XREF: sub_A14998+148j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14AEE:				; CODE XREF: sub_A14998+14Cj
		test	edx, edx
		js	loc_A14D0E
		mov	edi, esi
		mov	[ebp+var_14], esi
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		test	edx, edx
		js	loc_A14D0E
		mov	eax, ds:dword_A93EBC
		test	eax, eax
		jz	short loc_A14B18
		push	esi
		push	edi
		call	eax
		jmp	short loc_A14B1D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14B18:				; CODE XREF: sub_A14998+178j
		mov	eax, 0C00000BBh

loc_A14B1D:				; CODE XREF: sub_A14998+17Ej
		mov	[ebp+var_4], eax
		push	8
		pop	edi
		mov	[ebp+arg_4], edi
		lea	eax, [ebp+arg_4]
		mov	ecx, edi
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A14B42
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_8], eax
		jmp	short loc_A14B45
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14B42:				; CODE XREF: sub_A14998+1A0j
		mov	eax, [ebp+var_8]

loc_A14B45:				; CODE XREF: sub_A14998+1A8j
		test	edx, edx
		js	loc_A14D0E
		xor	esi, esi
		mov	[ebp+var_18], edi
		lea	ecx, [ebp+var_18]
		mov	edx, eax
		push	ecx
		mov	ecx, edi
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A14D0E
		mov	eax, [ebp+var_18]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A14B7D
		mov	edx, 0C0000095h
		jmp	short loc_A14B8A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14B7D:				; CODE XREF: sub_A14998+1DCj
		lea	esi, [ecx+8]
		cmp	esi, ecx
		jb	loc_A14C09
		xor	edx, edx

loc_A14B8A:				; CODE XREF: sub_A14998+1E3j
		test	edx, edx
		js	loc_A14D0E
		mov	edi, [ebp+var_28]
		mov	edx, esi
		push	4
		pop	ecx
		mov	[ebp+arg_4], ecx
		mov	eax, [edi+10h]
		mov	edi, [edi+8]
		mov	[ebp+var_28], eax
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A14D0E
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A14BC7
		xor	edx, edx
		jmp	short loc_A14BCF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14BC7:				; CODE XREF: sub_A14998+229j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14BCF:				; CODE XREF: sub_A14998+22Dj
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	loc_A14D0E
		lea	eax, [ebp+arg_4]
		mov	edx, edi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A14D0E
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A14C09
		mov	edx, [ebp+var_28]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		jmp	short loc_A14C0E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14C09:				; CODE XREF: sub_A14998+1EAj
					; sub_A14998+25Fj
		mov	edx, 0C0000095h

loc_A14C0E:				; CODE XREF: sub_A14998+26Fj
		test	edx, edx
		js	loc_A14D0E
		mov	eax, [ebp+var_8]
		lea	edi, [ebx+4]
		mov	[edi], eax
		test	eax, eax
		jnz	short loc_A14C2C
		mov	edx, 0C000003Eh
		jmp	loc_A14D0E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14C2C:				; CODE XREF: sub_A14998+288j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A14C49
		mov	edx, 0C0000017h
		jmp	loc_A14D0E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14C49:				; CODE XREF: sub_A14998+2A5j
		mov	[ebx+8], edx
		and	dword ptr [ebx], 0
		or	[ebp+var_4], 10000000h
		lea	esi, [edx+4]
		cmp	esi, edx
		jb	loc_A14D09
		mov	ecx, [edi]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		ja	loc_A14A61
		mov	eax, [ebp+var_4]
		mov	dword ptr [edx], 4
		mov	[esi], eax
		inc	dword ptr [ebx]
		mov	ecx, [ebx]
		mov	[ebp+var_28], ecx
		mov	eax, [ebx+8]
		mov	[ebp+var_24], eax
		test	eax, eax
		jnz	short loc_A14CA3
		mov	ecx, [edi]
		push	edi
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A14D0E
		inc	dword ptr [ebx]
		xor	edx, edx
		jmp	short loc_A14D0E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14CA3:				; CODE XREF: sub_A14998+2F2j
		and	[ebp+var_14], 0
		mov	esi, eax
		mov	[ebp+arg_4], esi
		test	ecx, ecx
		jz	short loc_A14CDA

loc_A14CB0:				; CODE XREF: sub_A14998+340j
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A14D09
		lea	eax, [ebp+arg_4]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A14D0E
		mov	ecx, [ebp+var_14]
		mov	esi, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_14], ecx
		cmp	ecx, [ebp+var_28]
		jb	short loc_A14CB0

loc_A14CDA:				; CODE XREF: sub_A14998+316j
		lea	eax, [esi+4]
		cmp	eax, esi
		jb	short loc_A14D09
		mov	ecx, [edi]
		lea	eax, [esi+0Ch]
		add	ecx, [ebp+var_24]
		xor	edx, edx
		cmp	eax, ecx
		ja	loc_A14A61
		mov	eax, [ebp+var_1C]
		mov	dword ptr [esi], 8
		mov	[esi+4], eax
		mov	eax, [ebp+var_20]
		mov	[esi+8], eax
		inc	dword ptr [ebx]
		jmp	short loc_A14D0E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14D09:				; CODE XREF: sub_A14998+2C3j
					; sub_A14998+320j ...
		mov	edx, 0C0000095h

loc_A14D0E:				; CODE XREF: sub_A14998+2Cj
					; sub_A14998+CEj ...
		pop	edi
		pop	esi
		mov	eax, edx
		pop	ebx
		leave
		retn	8
sub_A14998	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A14D17	proc near		; CODE XREF: sub_785212+1AF7p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	eax, [ecx+8]
		push	ebx
		xor	ebx, ebx
		mov	[ebp+var_1C], edx
		and	[ebp+var_14], ebx
		mov	edx, 0C000000Dh
		and	[ebp+var_18], ebx
		and	[ebp+var_4], ebx
		push	esi
		push	edi
		xor	edi, edi
		mov	[ebp+var_8], ebx
		test	eax, eax
		jnz	short loc_A14D48

loc_A14D41:				; CODE XREF: sub_A14D17+34j
		mov	esi, edx
		jmp	loc_A14DCC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14D48:				; CODE XREF: sub_A14D17+28j
		cmp	dword ptr [ecx], 3
		jbe	short loc_A14D41
		xor	ebx, ebx

loc_A14D4F:				; CODE XREF: sub_A14D17+6Aj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A14D5C
		xor	esi, esi
		jmp	short loc_A14D64
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14D5C:				; CODE XREF: sub_A14D17+3Fj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14D64:				; CODE XREF: sub_A14D17+43j
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	short loc_A14DA8
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A14DA8
		mov	eax, [ebp+var_C]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A14D4F
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A14D90
		xor	esi, esi
		jmp	short loc_A14D98
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14D90:				; CODE XREF: sub_A14D17+73j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14D98:				; CODE XREF: sub_A14D17+77j
		test	esi, esi
		js	short loc_A14DA8
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A14DAB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14DA8:				; CODE XREF: sub_A14D17+52j
					; sub_A14D17+61j ...
		mov	eax, [ebp+var_4]

loc_A14DAB:				; CODE XREF: sub_A14D17+8Fj
		test	esi, esi
		js	short loc_A14DC9
		cmp	eax, 8
		jz	short loc_A14DBE

loc_A14DB4:				; CODE XREF: sub_A14D17+297j
					; sub_A14D17+32Fj
		mov	esi, 0C0000023h
		jmp	loc_A15066
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14DBE:				; CODE XREF: sub_A14D17+9Bj
		mov	eax, [edi]
		mov	[ebp+var_14], eax
		mov	eax, [edi+4]
		mov	[ebp+var_18], eax

loc_A14DC9:				; CODE XREF: sub_A14D17+96j
		mov	ebx, [ebp+var_8]

loc_A14DCC:				; CODE XREF: sub_A14D17+2Cj
		test	esi, esi
		js	loc_A15066
		mov	eax, ds:dword_A93E68
		test	eax, eax
		jz	short loc_A14DE1
		call	eax
		jmp	short loc_A14DE6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14DE1:				; CODE XREF: sub_A14D17+C4j
		mov	eax, 0C00000BBh

loc_A14DE6:				; CODE XREF: sub_A14D17+C8j
		mov	[ebp+var_C], eax
		mov	esi, eax
		test	eax, eax
		js	loc_A15066
		push	8
		pop	ecx
		mov	[ebp+var_4], ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15066
		mov	ebx, [ebp+var_4]
		mov	[ebp+var_8], ebx
		push	8
		pop	ecx
		xor	edi, edi
		mov	[ebp+var_10], ecx
		lea	eax, [ebp+var_10]
		mov	edx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15066
		mov	eax, [ebp+var_10]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A14E46
		mov	esi, 0C0000095h
		jmp	short loc_A14E53
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14E46:				; CODE XREF: sub_A14D17+126j
		lea	edi, [ecx+8]
		cmp	edi, ecx
		jb	loc_A14ED6
		xor	esi, esi

loc_A14E53:				; CODE XREF: sub_A14D17+12Dj
		test	esi, esi
		js	loc_A15066
		mov	ebx, [ebp+var_1C]
		mov	edx, edi
		mov	[ebp+var_4], 4
		mov	eax, [ebx+10h]
		mov	ebx, [ebx+8]
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	4
		pop	ecx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15066
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A14E94
		xor	esi, esi
		jmp	short loc_A14E9C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14E94:				; CODE XREF: sub_A14D17+177j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A14E9C:				; CODE XREF: sub_A14D17+17Bj
		mov	[ebp+var_4], ecx
		test	esi, esi
		js	loc_A15066
		lea	eax, [ebp+var_4]
		mov	edx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15066
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A14ED6
		mov	edx, [ebp+var_1C]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		jmp	short loc_A14EDB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14ED6:				; CODE XREF: sub_A14D17+134j
					; sub_A14D17+1ADj
		mov	esi, 0C0000095h

loc_A14EDB:				; CODE XREF: sub_A14D17+1BDj
		test	esi, esi
		js	loc_A15066
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jnz	short loc_A14EF4
		mov	esi, 0C000000Dh
		jmp	loc_A15066
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14EF4:				; CODE XREF: sub_A14D17+1D1j
		mov	eax, [ebp+var_8]
		lea	ebx, [edi+4]
		xor	esi, esi
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A14F09
		mov	esi, 0C000003Eh
		jmp	short loc_A14F26
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14F09:				; CODE XREF: sub_A14D17+1E9j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		test	eax, eax
		jnz	short loc_A14F21
		mov	esi, 0C0000017h
		jmp	short loc_A14F26
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14F21:				; CODE XREF: sub_A14D17+201j
		mov	[edi+8], eax
		and	[edi], esi

loc_A14F26:				; CODE XREF: sub_A14D17+1F0j
					; sub_A14D17+208j
		test	esi, esi
		js	loc_A15066
		mov	eax, [edi+8]
		or	[ebp+var_C], 10000000h
		mov	[ebp+var_4], eax
		test	eax, eax
		jnz	short loc_A14F58
		mov	ecx, [ebx]
		push	ebx
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15066
		inc	dword ptr [edi]
		jmp	short loc_A14FCC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14F58:				; CODE XREF: sub_A14D17+226j
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_8], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_1C], ecx
		test	ecx, ecx
		jz	short loc_A14F97

loc_A14F6A:				; CODE XREF: sub_A14D17+27Bj
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A14FED
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A14FC1
		mov	ecx, [ebp+var_8]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_8], ecx
		cmp	ecx, [ebp+var_1C]
		jb	short loc_A14F6A
		mov	eax, [ebp+var_4]

loc_A14F97:				; CODE XREF: sub_A14D17+251j
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A15061
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [ebx+8]
		cmp	eax, ecx
		ja	loc_A14DB4
		mov	eax, [ebp+var_C]
		mov	dword ptr [ebx], 4
		mov	[edx], eax
		inc	dword ptr [edi]

loc_A14FC1:				; CODE XREF: sub_A14D17+26Cj
					; sub_A14D17+2DBj
		lea	ebx, [edi+4]
		test	esi, esi
		js	loc_A15066

loc_A14FCC:				; CODE XREF: sub_A14D17+23Fj
		mov	eax, [edi+8]
		mov	[ebp+var_8], eax
		test	eax, eax
		jnz	short loc_A14FF4
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15066
		inc	dword ptr [edi]
		xor	esi, esi
		jmp	short loc_A15066
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14FED:				; CODE XREF: sub_A14D17+25Bj
		mov	esi, 0C0000095h
		jmp	short loc_A14FC1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A14FF4:				; CODE XREF: sub_A14D17+2BDj
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_C], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_1C], ecx
		test	ecx, ecx
		jz	short loc_A15033

loc_A15006:				; CODE XREF: sub_A14D17+317j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A15061
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15066
		mov	ecx, [ebp+var_C]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_C], ecx
		cmp	ecx, [ebp+var_1C]
		jb	short loc_A15006
		mov	eax, [ebp+var_8]

loc_A15033:				; CODE XREF: sub_A14D17+2EDj
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	short loc_A15061
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [ebx+0Ch]
		cmp	eax, ecx
		ja	loc_A14DB4
		mov	eax, [ebp+var_14]
		mov	dword ptr [ebx], 8
		mov	[edx], eax
		mov	eax, [ebp+var_18]
		mov	[edx+4], eax
		inc	dword ptr [edi]
		jmp	short loc_A15066
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15061:				; CODE XREF: sub_A14D17+285j
					; sub_A14D17+2F7j ...
		mov	esi, 0C0000095h

loc_A15066:				; CODE XREF: sub_A14D17+A2j
					; sub_A14D17+B7j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A14D17	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1506F	proc near		; CODE XREF: sub_785212+1AE1p

var_134		= dword	ptr -134h
var_130		= dword	ptr -130h
var_12C		= dword	ptr -12Ch
var_128		= dword	ptr -128h
var_124		= dword	ptr -124h
var_120		= dword	ptr -120h
var_11C		= dword	ptr -11Ch
var_118		= dword	ptr -118h
var_114		= dword	ptr -114h
var_110		= dword	ptr -110h
var_10C		= dword	ptr -10Ch
var_108		= dword	ptr -108h
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 134h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		and	[ebp+var_134], 0
		mov	eax, ecx
		and	[ebp+var_124], 0
		and	[ebp+var_110], 0
		and	[ebp+var_114], 0
		mov	[ebp+var_11C], edx
		mov	[ebp+var_120], eax
		push	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		push	edi
		test	eax, eax
		jnz	short loc_A150C2

loc_A150B8:				; CODE XREF: sub_A1506F+55j
					; sub_A1506F+59j ...
		mov	edx, 0C000000Dh
		jmp	loc_A155C9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A150C2:				; CODE XREF: sub_A1506F+47j
		test	edx, edx
		jz	short loc_A150B8
		test	ebx, ebx
		jz	short loc_A150B8
		mov	esi, [eax+8]
		xor	edi, edi
		and	[ebp+var_12C], edi
		test	esi, esi
		jnz	short loc_A150E3

loc_A150D9:				; CODE XREF: sub_A1506F+77j
		mov	edx, 0C000000Dh
		jmp	loc_A151A6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A150E3:				; CODE XREF: sub_A1506F+68j
		cmp	dword ptr [eax], 3
		jbe	short loc_A150D9
		and	[ebp+var_128], edi
		mov	eax, esi

loc_A150F0:				; CODE XREF: sub_A1506F+D8j
		mov	ecx, [eax]
		mov	[ebp+var_118], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15103
		xor	edx, edx
		jmp	short loc_A1510B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15103:				; CODE XREF: sub_A1506F+8Ej
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1510B:				; CODE XREF: sub_A1506F+92j
		mov	[ebp+var_10C], ecx
		test	edx, edx
		js	loc_A151A0
		mov	edx, [ebp+var_118]
		lea	eax, [ebp+var_10C]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A151A0
		mov	edx, [ebp+var_128]
		mov	eax, [ebp+var_10C]
		inc	edx
		mov	[ebp+var_128], edx
		cmp	edx, 3
		jb	short loc_A150F0
		mov	ecx, [eax]
		mov	[ebp+var_118], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1515C
		xor	edx, edx
		jmp	short loc_A15164
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1515C:				; CODE XREF: sub_A1506F+E7j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15164:				; CODE XREF: sub_A1506F+EBj
		test	edx, edx
		js	short loc_A151A0
		mov	eax, [ebp+var_118]
		mov	edi, eax
		neg	edi
		mov	[ebp+var_12C], eax
		sbb	edi, edi
		and	edi, ecx
		test	edx, edx
		js	short loc_A151A0
		cmp	eax, 8
		jz	short loc_A1518F

loc_A15185:				; CODE XREF: sub_A1506F+3B3j
					; sub_A1506F+463j ...
		mov	edx, 0C0000023h
		jmp	loc_A155C9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1518F:				; CODE XREF: sub_A1506F+114j
		mov	eax, [edi]
		mov	[ebp+var_134], eax
		mov	eax, [edi+4]
		mov	[ebp+var_124], eax

loc_A151A0:				; CODE XREF: sub_A1506F+A4j
					; sub_A1506F+C0j ...
		mov	eax, [ebp+var_120]

loc_A151A6:				; CODE XREF: sub_A1506F+6Fj
		test	edx, edx
		js	loc_A155C9
		test	esi, esi
		jz	loc_A150B8
		cmp	dword ptr [eax], 4
		jbe	loc_A150B8
		xor	edi, edi

loc_A151C1:				; CODE XREF: sub_A1506F+191j
		mov	eax, [esi]
		lea	ecx, [esi+4]
		cmp	ecx, esi
		jb	short loc_A151CE
		xor	edx, edx
		jmp	short loc_A151D6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A151CE:				; CODE XREF: sub_A1506F+159j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A151D6:				; CODE XREF: sub_A1506F+15Dj
		mov	[ebp+var_10C], ecx
		test	edx, edx
		js	short loc_A1522B
		lea	edx, [ebp+var_10C]
		push	edx
		mov	edx, eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A1522B
		inc	edi
		cmp	edi, 4
		jnb	short loc_A15202
		mov	esi, [ebp+var_10C]
		jmp	short loc_A151C1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15202:				; CODE XREF: sub_A1506F+189j
		mov	eax, [ebp+var_10C]
		mov	esi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15215
		xor	edx, edx
		jmp	short loc_A1521D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15215:				; CODE XREF: sub_A1506F+1A0j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1521D:				; CODE XREF: sub_A1506F+1A4j
		test	edx, edx
		js	short loc_A1522B
		mov	edi, esi
		neg	esi
		sbb	esi, esi
		and	esi, ecx
		jmp	short loc_A15237
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1522B:				; CODE XREF: sub_A1506F+16Fj
					; sub_A1506F+183j ...
		mov	esi, [ebp+var_110]
		mov	edi, [ebp+var_114]

loc_A15237:				; CODE XREF: sub_A1506F+1BAj
		test	edx, edx
		js	loc_A155C9
		mov	eax, ds:dword_A93E9C
		test	eax, eax
		jz	short loc_A1525C
		push	100h
		lea	ecx, [ebp+var_108]
		push	ecx
		push	edi
		push	esi
		call	eax
		mov	esi, eax
		jmp	short loc_A15261
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1525C:				; CODE XREF: sub_A1506F+1D7j
		mov	esi, 0C00000BBh

loc_A15261:				; CODE XREF: sub_A1506F+1EBj
		mov	edx, esi
		test	esi, esi
		js	loc_A155C9
		and	[ebp+var_110], 0
		lea	eax, [ebp+var_110]
		xor	ecx, ecx
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A155C9
		mov	ecx, [ebp+var_110]
		lea	eax, [ebp+var_110]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A155C9
		mov	ecx, [ebp+var_110]
		lea	eax, [ebp+var_110]
		push	eax
		mov	edx, 104h
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A155C9
		push	8
		pop	ecx
		xor	edi, edi
		mov	[ebp+var_130], ecx
		mov	edx, [ebp+var_110]
		lea	eax, [ebp+var_130]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A155C9
		mov	eax, [ebp+var_130]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A1530B
		mov	edx, 0C0000095h
		jmp	short loc_A15318
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1530B:				; CODE XREF: sub_A1506F+293j
		lea	edi, [ecx+8]
		cmp	edi, ecx
		jb	loc_A153BF
		xor	edx, edx

loc_A15318:				; CODE XREF: sub_A1506F+29Aj
		test	edx, edx
		js	loc_A155C9
		mov	ecx, [ebp+var_11C]
		mov	edx, edi
		push	4
		mov	eax, [ecx+10h]
		mov	[ebp+var_118], eax
		mov	eax, [ecx+8]
		mov	[ebp+var_11C], eax
		lea	eax, [ebp+var_10C]
		pop	ecx
		push	eax
		mov	[ebp+var_10C], ecx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A155C9
		mov	eax, [ebp+var_10C]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1536A
		xor	edx, edx
		jmp	short loc_A15372
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1536A:				; CODE XREF: sub_A1506F+2F5j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15372:				; CODE XREF: sub_A1506F+2F9j
		mov	[ebp+var_10C], ecx
		test	edx, edx
		js	loc_A155C9
		mov	edx, [ebp+var_11C]
		lea	eax, [ebp+var_10C]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A155C9
		mov	eax, [ebp+var_10C]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A153BF
		mov	edx, [ebp+var_118]
		lea	eax, [ebp+var_10C]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		jmp	short loc_A153C4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A153BF:				; CODE XREF: sub_A1506F+2A1j
					; sub_A1506F+338j
		mov	edx, 0C0000095h

loc_A153C4:				; CODE XREF: sub_A1506F+34Ej
		test	edx, edx
		js	loc_A155C9
		mov	eax, [ebp+var_110]
		lea	edi, [ebx+4]
		mov	[edi], eax
		test	eax, eax
		jnz	short loc_A153E5
		mov	edx, 0C000003Eh
		jmp	loc_A155C9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A153E5:				; CODE XREF: sub_A1506F+36Aj
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A15402
		mov	edx, 0C0000017h
		jmp	loc_A155C9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15402:				; CODE XREF: sub_A1506F+387j
		mov	[ebx+8], edx
		and	dword ptr [ebx], 0
		or	esi, 10000000h
		lea	eax, [edx+4]
		cmp	eax, edx
		jb	loc_A155C4
		mov	ecx, [edi]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		ja	loc_A15185
		mov	dword ptr [edx], 4
		mov	[edx+4], esi
		inc	dword ptr [ebx]
		mov	ecx, [ebx]
		mov	[ebp+var_11C], ecx
		mov	eax, [ebx+8]
		mov	[ebp+var_118], eax
		test	eax, eax
		jnz	short loc_A15464
		mov	ecx, [edi]
		push	edi
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A155C9
		inc	dword ptr [ebx]
		jmp	loc_A154FA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15464:				; CODE XREF: sub_A1506F+3D7j
		and	[ebp+var_120], 0
		mov	esi, eax
		mov	[ebp+var_114], esi
		test	ecx, ecx
		jz	short loc_A154B8

loc_A15477:				; CODE XREF: sub_A1506F+447j
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A15527
		lea	eax, [ebp+var_114]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A155C9
		mov	ecx, [ebp+var_120]
		mov	esi, [ebp+var_114]
		inc	ecx
		mov	[ebp+var_120], ecx
		cmp	ecx, [ebp+var_11C]
		jb	short loc_A15477

loc_A154B8:				; CODE XREF: sub_A1506F+406j
		lea	eax, [esi+4]
		cmp	eax, esi
		jb	loc_A155C4
		mov	ecx, [edi]
		lea	eax, [esi+0Ch]
		add	ecx, [ebp+var_118]
		xor	edx, edx
		cmp	eax, ecx
		ja	loc_A15185
		mov	eax, [ebp+var_134]
		mov	dword ptr [esi], 8
		mov	[esi+4], eax
		mov	eax, [ebp+var_124]
		mov	[esi+8], eax
		inc	dword ptr [ebx]

loc_A154F2:				; CODE XREF: sub_A1506F+4BDj
		test	edx, edx
		js	loc_A155C9

loc_A154FA:				; CODE XREF: sub_A1506F+3F0j
		mov	eax, [ebx+8]
		mov	[ebp+var_118], eax
		test	eax, eax
		jnz	short loc_A1552E
		mov	ecx, [edi]
		mov	edx, 104h
		push	edi
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A155C9
		inc	dword ptr [ebx]
		xor	edx, edx
		jmp	loc_A155C9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15527:				; CODE XREF: sub_A1506F+410j
		mov	edx, 0C0000095h
		jmp	short loc_A154F2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1552E:				; CODE XREF: sub_A1506F+496j
		mov	ecx, [ebx]
		mov	esi, eax
		and	[ebp+var_124], 0
		mov	[ebp+var_114], esi
		mov	[ebp+var_11C], ecx
		test	ecx, ecx
		jz	short loc_A15588

loc_A15549:				; CODE XREF: sub_A1506F+511j
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A155C4
		lea	eax, [ebp+var_114]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A155C9
		mov	ecx, [ebp+var_124]
		mov	esi, [ebp+var_114]
		inc	ecx
		mov	[ebp+var_124], ecx
		cmp	ecx, [ebp+var_11C]
		jb	short loc_A15549
		mov	eax, [ebp+var_118]

loc_A15588:				; CODE XREF: sub_A1506F+4D8j
		lea	ecx, [esi+4]
		mov	[ebp+var_11C], ecx
		cmp	ecx, esi
		jb	short loc_A155C4
		mov	ecx, [edi]
		xor	edx, edx
		add	ecx, eax
		lea	eax, [esi+104h]
		cmp	eax, ecx
		ja	loc_A15185
		mov	edi, [ebp+var_11C]
		mov	dword ptr [esi], 100h
		lea	esi, [ebp+var_108]
		push	40h
		pop	ecx
		rep movsd
		inc	dword ptr [ebx]
		jmp	short loc_A155C9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A155C4:				; CODE XREF: sub_A1506F+3A4j
					; sub_A1506F+44Ej ...
		mov	edx, 0C0000095h

loc_A155C9:				; CODE XREF: sub_A1506F+4Ej
					; sub_A1506F+11Bj ...
		mov	ecx, [ebp+var_4]
		mov	eax, edx
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	8
sub_A1506F	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A155DC	proc near		; CODE XREF: sub_785212+19FAp

var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		push	ebx
		mov	ebx, ecx
		mov	[ebp+var_3C], edx
		xor	ecx, ecx
		mov	[ebp+var_18], ebx
		push	esi
		push	edi
		mov	eax, [ebx+8]
		mov	edi, ecx
		mov	[ebp+var_C], ecx
		mov	[ebp+var_30], ecx
		mov	[ebp+var_34], ecx
		mov	[ebp+var_28], ecx
		mov	[ebp+var_24], ecx
		mov	[ebp+var_20], ecx
		mov	[ebp+var_1C], ecx
		mov	[ebp+var_10], ecx
		mov	[ebp+var_8], ecx
		mov	[ebp+var_38], ecx
		test	eax, eax
		jnz	short loc_A15622

loc_A15618:				; CODE XREF: sub_A155DC+49j
		mov	esi, 0C000000Dh
		jmp	loc_A156A7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15622:				; CODE XREF: sub_A155DC+3Aj
		cmp	dword ptr [ebx], 3
		jbe	short loc_A15618
		mov	ebx, ecx

loc_A15629:				; CODE XREF: sub_A155DC+7Fj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15636
		xor	esi, esi
		jmp	short loc_A1563E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15636:				; CODE XREF: sub_A155DC+54j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1563E:				; CODE XREF: sub_A155DC+58j
		mov	[ebp+var_14], ecx
		test	esi, esi
		js	short loc_A15682
		lea	eax, [ebp+var_14]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15682
		mov	eax, [ebp+var_14]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A15629
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1566A
		xor	esi, esi
		jmp	short loc_A15672
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1566A:				; CODE XREF: sub_A155DC+88j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15672:				; CODE XREF: sub_A155DC+8Cj
		test	esi, esi
		js	short loc_A15682
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A15684
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15682:				; CODE XREF: sub_A155DC+67j
					; sub_A155DC+76j ...
		mov	eax, edi

loc_A15684:				; CODE XREF: sub_A155DC+A4j
		test	esi, esi
		js	short loc_A156A2
		cmp	eax, 8
		jz	short loc_A15697

loc_A1568D:				; CODE XREF: sub_A155DC+25Ej
		mov	esi, 0C0000023h
		jmp	loc_A15D1F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15697:				; CODE XREF: sub_A155DC+AFj
		mov	eax, [edi]
		mov	[ebp+var_30], eax
		mov	eax, [edi+4]
		mov	[ebp+var_34], eax

loc_A156A2:				; CODE XREF: sub_A155DC+AAj
		mov	ebx, [ebp+var_18]
		xor	ecx, ecx

loc_A156A7:				; CODE XREF: sub_A155DC+41j
		test	esi, esi
		js	loc_A15D1F
		mov	eax, [ebx+8]
		test	eax, eax
		jnz	short loc_A156C0

loc_A156B6:				; CODE XREF: sub_A155DC+E7j
					; sub_A155DC+15Fj ...
		mov	esi, 0C000000Dh
		jmp	loc_A15D1F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A156C0:				; CODE XREF: sub_A155DC+D8j
		cmp	dword ptr [ebx], 4
		jbe	short loc_A156B6
		mov	edi, ecx

loc_A156C7:				; CODE XREF: sub_A155DC+125j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A156D4
		xor	esi, esi
		jmp	short loc_A156DC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A156D4:				; CODE XREF: sub_A155DC+F2j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A156DC:				; CODE XREF: sub_A155DC+F6j
		mov	[ebp+var_14], ecx
		test	esi, esi
		js	loc_A15D1F
		lea	eax, [ebp+var_14]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D1F
		mov	eax, [ebp+var_14]
		inc	edi
		cmp	edi, 4
		jb	short loc_A156C7
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15710
		xor	esi, esi
		jmp	short loc_A15718
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15710:				; CODE XREF: sub_A155DC+12Ej
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15718:				; CODE XREF: sub_A155DC+132j
		test	esi, esi
		js	loc_A15D1F
		mov	eax, edx
		mov	[ebp+var_24], edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_28], eax
		test	esi, esi
		js	loc_A15D1F
		mov	eax, [ebx+8]
		test	eax, eax
		jz	loc_A156B6
		cmp	dword ptr [ebx], 5
		jbe	loc_A156B6
		xor	edi, edi

loc_A1574C:				; CODE XREF: sub_A155DC+1AAj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15759
		xor	esi, esi
		jmp	short loc_A15761
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15759:				; CODE XREF: sub_A155DC+177j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15761:				; CODE XREF: sub_A155DC+17Bj
		mov	[ebp+var_14], ecx
		test	esi, esi
		js	loc_A15D1F
		lea	eax, [ebp+var_14]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D1F
		mov	eax, [ebp+var_14]
		inc	edi
		cmp	edi, 5
		jb	short loc_A1574C
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15795
		xor	esi, esi
		jmp	short loc_A1579D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15795:				; CODE XREF: sub_A155DC+1B3j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1579D:				; CODE XREF: sub_A155DC+1B7j
		test	esi, esi
		js	loc_A15D1F
		mov	eax, edx
		mov	[ebp+var_1C], edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_20], eax
		test	esi, esi
		js	loc_A15D1F
		mov	eax, [ebx+8]
		xor	edi, edi
		and	[ebp+var_4], edi
		test	eax, eax
		jnz	short loc_A157D0

loc_A157C7:				; CODE XREF: sub_A155DC+1F7j
		mov	esi, 0C000000Dh
		mov	ebx, edi
		jmp	short loc_A1584A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A157D0:				; CODE XREF: sub_A155DC+1E9j
		cmp	dword ptr [ebx], 6
		jbe	short loc_A157C7
		xor	ebx, ebx

loc_A157D7:				; CODE XREF: sub_A155DC+22Dj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A157E4
		xor	esi, esi
		jmp	short loc_A157EC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A157E4:				; CODE XREF: sub_A155DC+202j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A157EC:				; CODE XREF: sub_A155DC+206j
		mov	[ebp+var_14], ecx
		test	esi, esi
		js	short loc_A15830
		lea	eax, [ebp+var_14]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15830
		mov	eax, [ebp+var_14]
		inc	ebx
		cmp	ebx, 6
		jb	short loc_A157D7
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15818
		xor	esi, esi
		jmp	short loc_A15820
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15818:				; CODE XREF: sub_A155DC+236j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15820:				; CODE XREF: sub_A155DC+23Aj
		test	esi, esi
		js	short loc_A15830
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A15833
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15830:				; CODE XREF: sub_A155DC+215j
					; sub_A155DC+224j ...
		mov	eax, [ebp+var_4]

loc_A15833:				; CODE XREF: sub_A155DC+252j
		test	esi, esi
		js	short loc_A15847
		cmp	eax, 4
		jnz	loc_A1568D
		mov	ebx, [edi]
		mov	[ebp+var_8], ebx
		jmp	short loc_A1584A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15847:				; CODE XREF: sub_A155DC+259j
		mov	ebx, [ebp+var_8]

loc_A1584A:				; CODE XREF: sub_A155DC+1F2j
					; sub_A155DC+269j
		test	esi, esi
		js	loc_A15D1F
		xor	esi, esi
		test	ebx, ebx
		jz	short loc_A15886
		push	20534C53h
		push	ebx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		mov	[ebp+var_10], edi
		test	edi, edi
		jnz	short loc_A15878
		mov	esi, 0C0000017h
		jmp	loc_A15D1F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15878:				; CODE XREF: sub_A155DC+290j
		push	ebx		; size_t
		push	0		; int
		push	edi		; void *
		call	_memset
		add	esp, 0Ch
		jmp	short loc_A1588A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15886:				; CODE XREF: sub_A155DC+27Aj
		mov	edi, [ebp+var_10]
		inc	esi

loc_A1588A:				; CODE XREF: sub_A155DC+2A8j
		mov	eax, ds:dword_A93EAC
		test	eax, eax
		jz	short loc_A158B1
		neg	esi
		lea	ecx, [ebp+var_38]
		push	ecx
		sbb	esi, esi
		push	ebx
		not	esi
		and	esi, edi
		push	esi
		push	[ebp+var_1C]
		push	[ebp+var_20]
		push	[ebp+var_24]
		push	[ebp+var_28]
		call	eax
		jmp	short loc_A158B6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A158B1:				; CODE XREF: sub_A155DC+2B5j
		mov	eax, 0C00000BBh

loc_A158B6:				; CODE XREF: sub_A155DC+2D3j
		and	[ebp+var_4], 0
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_4]
		xor	ecx, ecx
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15922
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15922
		lea	edx, [ebx+4]
		cmp	edx, 4
		jb	short loc_A1591D
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15922
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15922
		mov	eax, [ebp+var_4]
		mov	[ebp+var_C], eax
		jmp	short loc_A15925
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1591D:				; CODE XREF: sub_A155DC+310j
		mov	esi, 0C0000095h

loc_A15922:				; CODE XREF: sub_A155DC+2F3j
					; sub_A155DC+308j ...
		mov	eax, [ebp+var_C]

loc_A15925:				; CODE XREF: sub_A155DC+33Fj
		test	esi, esi
		js	loc_A15D0D
		xor	edi, edi
		mov	[ebp+var_2C], 8
		lea	ecx, [ebp+var_2C]
		mov	edx, eax
		push	ecx
		push	8
		pop	ecx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D0D
		mov	eax, [ebp+var_2C]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A15962
		mov	esi, 0C0000095h
		jmp	short loc_A1596F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15962:				; CODE XREF: sub_A155DC+37Dj
		lea	edi, [ecx+8]
		cmp	edi, ecx
		jb	loc_A159EE
		xor	esi, esi

loc_A1596F:				; CODE XREF: sub_A155DC+384j
		test	esi, esi
		js	loc_A15D0D
		mov	ebx, [ebp+var_3C]
		mov	edx, edi
		push	4
		pop	ecx
		mov	[ebp+var_4], ecx
		mov	eax, [ebx+10h]
		mov	ebx, [ebx+8]
		mov	[ebp+var_3C], eax
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D0D
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A159AC
		xor	esi, esi
		jmp	short loc_A159B4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A159AC:				; CODE XREF: sub_A155DC+3CAj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A159B4:				; CODE XREF: sub_A155DC+3CEj
		mov	[ebp+var_4], ecx
		test	esi, esi
		js	loc_A15D0D
		lea	eax, [ebp+var_4]
		mov	edx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D0D
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A159EE
		mov	edx, [ebp+var_3C]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		jmp	short loc_A159F3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A159EE:				; CODE XREF: sub_A155DC+38Bj
					; sub_A155DC+400j
		mov	esi, 0C0000095h

loc_A159F3:				; CODE XREF: sub_A155DC+410j
		test	esi, esi
		js	loc_A15D0D
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jnz	short loc_A15A0C
		mov	esi, 0C000000Dh
		jmp	loc_A15D0D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15A0C:				; CODE XREF: sub_A155DC+424j
		mov	eax, [ebp+var_C]
		lea	ebx, [edi+4]
		xor	esi, esi
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A15A21
		mov	esi, 0C000003Eh
		jmp	short loc_A15A3E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15A21:				; CODE XREF: sub_A155DC+43Cj
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		test	eax, eax
		jnz	short loc_A15A39
		mov	esi, 0C0000017h
		jmp	short loc_A15A3E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15A39:				; CODE XREF: sub_A155DC+454j
		mov	[edi+8], eax
		and	[edi], esi

loc_A15A3E:				; CODE XREF: sub_A155DC+443j
					; sub_A155DC+45Bj
		test	esi, esi
		js	loc_A15D0D
		mov	eax, [edi+8]
		or	[ebp+var_14], 10000000h
		mov	[ebp+var_24], eax
		test	eax, eax
		jnz	short loc_A15A73
		mov	ecx, [ebx]
		push	ebx
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D0D
		inc	dword ptr [edi]
		jmp	loc_A15AF4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15A73:				; CODE XREF: sub_A155DC+479j
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_28], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_3C], ecx
		test	ecx, ecx
		jz	short loc_A15AB2

loc_A15A85:				; CODE XREF: sub_A155DC+4D1j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A15AD5
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15AE9
		mov	ecx, [ebp+var_28]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_28], ecx
		cmp	ecx, [ebp+var_3C]
		jb	short loc_A15A85
		mov	eax, [ebp+var_24]

loc_A15AB2:				; CODE XREF: sub_A155DC+4A7j
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A15D08
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [ebx+8]
		cmp	eax, ecx
		jbe	short loc_A15ADC

loc_A15ACB:				; CODE XREF: sub_A155DC+595j
					; sub_A155DC+6A1j ...
		mov	esi, 0C0000023h
		jmp	loc_A15D0D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15AD5:				; CODE XREF: sub_A155DC+4B1j
		mov	esi, 0C0000095h
		jmp	short loc_A15AE9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15ADC:				; CODE XREF: sub_A155DC+4EDj
		mov	eax, [ebp+var_14]
		mov	dword ptr [ebx], 4
		mov	[edx], eax
		inc	dword ptr [edi]

loc_A15AE9:				; CODE XREF: sub_A155DC+4C2j
					; sub_A155DC+4FEj
		lea	ebx, [edi+4]
		test	esi, esi
		js	loc_A15D0D

loc_A15AF4:				; CODE XREF: sub_A155DC+492j
		mov	eax, [edi+8]
		mov	[ebp+var_24], eax
		test	eax, eax
		jnz	short loc_A15B17
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D0D
		inc	dword ptr [edi]
		jmp	short loc_A15B95
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15B17:				; CODE XREF: sub_A155DC+520j
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_28], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_3C], ecx
		test	ecx, ecx
		jz	short loc_A15B5A

loc_A15B29:				; CODE XREF: sub_A155DC+579j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A15BE4
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15B8A
		mov	ecx, [ebp+var_28]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_28], ecx
		cmp	ecx, [ebp+var_3C]
		jb	short loc_A15B29
		mov	eax, [ebp+var_24]

loc_A15B5A:				; CODE XREF: sub_A155DC+54Bj
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A15D08
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [ebx+0Ch]
		cmp	eax, ecx
		ja	loc_A15ACB
		mov	eax, [ebp+var_30]
		mov	dword ptr [ebx], 8
		mov	[edx], eax
		mov	eax, [ebp+var_34]
		mov	[edx+4], eax
		inc	dword ptr [edi]

loc_A15B8A:				; CODE XREF: sub_A155DC+56Aj
					; sub_A155DC+60Dj
		lea	ebx, [edi+4]
		test	esi, esi
		js	loc_A15D0D

loc_A15B95:				; CODE XREF: sub_A155DC+539j
		cmp	[ebp+var_10], 0
		mov	ecx, [ebp+var_8]
		jnz	short loc_A15BEB
		test	ecx, ecx
		jz	short loc_A15BEF

loc_A15BA2:				; CODE XREF: sub_A155DC+611j
		mov	esi, 0C000000Dh

loc_A15BA7:				; CODE XREF: sub_A155DC+640j
					; sub_A155DC+6C0j
		test	esi, esi
		js	loc_A15D0D
		lea	ebx, [edi+4]

loc_A15BB2:				; CODE XREF: sub_A155DC+639j
		mov	eax, [ebp+var_38]
		mov	[ebp+var_28], eax
		mov	eax, [edi+8]
		mov	[ebp+var_30], eax
		test	eax, eax
		jnz	loc_A15CA1
		mov	ecx, [ebx]
		push	ebx
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D0D
		inc	dword ptr [edi]
		xor	esi, esi
		jmp	loc_A15D0D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15BE4:				; CODE XREF: sub_A155DC+555j
		mov	esi, 0C0000095h
		jmp	short loc_A15B8A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15BEB:				; CODE XREF: sub_A155DC+5C0j
		test	ecx, ecx
		jz	short loc_A15BA2

loc_A15BEF:				; CODE XREF: sub_A155DC+5C4j
		mov	eax, [edi+8]
		mov	[ebp+var_30], eax
		test	eax, eax
		jnz	short loc_A15C1E
		lea	edx, [ecx+4]
		cmp	edx, 4
		jb	short loc_A15C17
		mov	ecx, [ebx]
		push	ebx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D0D
		inc	dword ptr [edi]
		jmp	short loc_A15BB2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15C17:				; CODE XREF: sub_A155DC+623j
					; sub_A155DC+65Cj
		mov	esi, 0C0000095h
		jmp	short loc_A15BA7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15C1E:				; CODE XREF: sub_A155DC+61Bj
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_34], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_3C], ecx
		test	ecx, ecx
		jz	short loc_A15C61

loc_A15C30:				; CODE XREF: sub_A155DC+680j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A15C17
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A15D0D
		mov	ecx, [ebp+var_34]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_34], ecx
		cmp	ecx, [ebp+var_3C]
		jb	short loc_A15C30
		mov	eax, [ebp+var_30]

loc_A15C61:				; CODE XREF: sub_A155DC+652j
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A15D08
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		mov	eax, [ebp+var_8]
		add	eax, 4
		add	eax, ebx
		cmp	eax, ecx
		ja	loc_A15ACB
		mov	ecx, [ebp+var_10]
		mov	eax, [ebp+var_8]
		mov	[ebx], eax
		test	ecx, ecx
		jz	short loc_A15C9A
		push	eax		; size_t
		push	ecx		; void *
		push	edx		; void *
		call	_memcpy
		add	esp, 0Ch

loc_A15C9A:				; CODE XREF: sub_A155DC+6B1j
		inc	dword ptr [edi]
		jmp	loc_A15BA7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15CA1:				; CODE XREF: sub_A155DC+5E4j
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_34], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_3C], ecx
		test	ecx, ecx
		jz	short loc_A15CE0

loc_A15CB3:				; CODE XREF: sub_A155DC+6FFj
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A15D08
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15D0D
		mov	ecx, [ebp+var_34]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_34], ecx
		cmp	ecx, [ebp+var_3C]
		jb	short loc_A15CB3
		mov	eax, [ebp+var_30]

loc_A15CE0:				; CODE XREF: sub_A155DC+6D5j
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	short loc_A15D08
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [ebx+8]
		cmp	eax, ecx
		ja	loc_A15ACB
		mov	eax, [ebp+var_28]
		mov	dword ptr [ebx], 4
		mov	[edx], eax
		inc	dword ptr [edi]
		jmp	short loc_A15D0D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15D08:				; CODE XREF: sub_A155DC+4DBj
					; sub_A155DC+583j ...
		mov	esi, 0C0000095h

loc_A15D0D:				; CODE XREF: sub_A155DC+34Bj
					; sub_A155DC+36Cj ...
		mov	eax, [ebp+var_10]
		test	eax, eax
		jz	short loc_A15D1F
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A15D1F:				; CODE XREF: sub_A155DC+B6j
					; sub_A155DC+CDj ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A155DC	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A15D28	proc near		; CODE XREF: sub_785212+20C3p

var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 44h
		mov	eax, [ecx+8]
		push	ebx
		push	esi
		mov	[ebp+var_40], edx
		xor	edx, edx
		mov	[ebp+var_4], ecx
		mov	[ebp+var_C], edx
		mov	[ebp+var_34], edx
		mov	[ebp+var_38], edx
		mov	[ebp+var_2C], edx
		mov	[ebp+var_28], edx
		mov	[ebp+var_24], edx
		mov	[ebp+var_20], edx
		mov	[ebp+var_1C], edx
		mov	[ebp+var_10], edx
		mov	[ebp+var_8], edx
		mov	[ebp+var_3C], edx
		push	edi
		mov	edi, edx
		test	eax, eax
		jnz	short loc_A15D6F

loc_A15D65:				; CODE XREF: sub_A15D28+4Aj
		mov	esi, 0C000000Dh
		jmp	loc_A15DF4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15D6F:				; CODE XREF: sub_A15D28+3Bj
		cmp	dword ptr [ecx], 3
		jbe	short loc_A15D65
		mov	ebx, edx

loc_A15D76:				; CODE XREF: sub_A15D28+80j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15D83
		xor	esi, esi
		jmp	short loc_A15D8B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15D83:				; CODE XREF: sub_A15D28+55j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15D8B:				; CODE XREF: sub_A15D28+59j
		mov	[ebp+var_14], ecx
		test	esi, esi
		js	short loc_A15DCF
		lea	eax, [ebp+var_14]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15DCF
		mov	eax, [ebp+var_14]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A15D76
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15DB7
		xor	esi, esi
		jmp	short loc_A15DBF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15DB7:				; CODE XREF: sub_A15D28+89j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15DBF:				; CODE XREF: sub_A15D28+8Dj
		test	esi, esi
		js	short loc_A15DCF
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A15DD1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15DCF:				; CODE XREF: sub_A15D28+68j
					; sub_A15D28+77j ...
		mov	eax, edi

loc_A15DD1:				; CODE XREF: sub_A15D28+A5j
		test	esi, esi
		js	short loc_A15DEF
		cmp	eax, 8
		jz	short loc_A15DE4

loc_A15DDA:				; CODE XREF: sub_A15D28+151j
					; sub_A15D28+2F7j
		mov	esi, 0C0000023h
		jmp	loc_A16504
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15DE4:				; CODE XREF: sub_A15D28+B0j
		mov	eax, [edi]
		mov	[ebp+var_34], eax
		mov	eax, [edi+4]
		mov	[ebp+var_38], eax

loc_A15DEF:				; CODE XREF: sub_A15D28+ABj
		mov	ecx, [ebp+var_4]
		xor	edx, edx

loc_A15DF4:				; CODE XREF: sub_A15D28+42j
		test	esi, esi
		js	loc_A16504
		mov	eax, [ecx+8]
		mov	ebx, edx
		mov	[ebp+var_14], edx
		test	eax, eax
		jnz	short loc_A15E0F

loc_A15E08:				; CODE XREF: sub_A15D28+EAj
		mov	esi, 0C000000Dh
		jmp	short loc_A15E89
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15E0F:				; CODE XREF: sub_A15D28+DEj
		cmp	dword ptr [ecx], 4
		jbe	short loc_A15E08
		mov	edi, edx

loc_A15E16:				; CODE XREF: sub_A15D28+120j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15E23
		xor	esi, esi
		jmp	short loc_A15E2B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15E23:				; CODE XREF: sub_A15D28+F5j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15E2B:				; CODE XREF: sub_A15D28+F9j
		mov	[ebp+var_18], ecx
		test	esi, esi
		js	short loc_A15E6F
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A15E6F
		mov	eax, [ebp+var_18]
		inc	edi
		cmp	edi, 4
		jb	short loc_A15E16
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15E57
		xor	esi, esi
		jmp	short loc_A15E5F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15E57:				; CODE XREF: sub_A15D28+129j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15E5F:				; CODE XREF: sub_A15D28+12Dj
		test	esi, esi
		js	short loc_A15E6F
		mov	ebx, edx
		mov	eax, edx
		neg	ebx
		sbb	ebx, ebx
		and	ebx, ecx
		jmp	short loc_A15E72
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15E6F:				; CODE XREF: sub_A15D28+108j
					; sub_A15D28+117j ...
		mov	eax, [ebp+var_14]

loc_A15E72:				; CODE XREF: sub_A15D28+145j
		test	esi, esi
		js	short loc_A15E84
		cmp	eax, 4
		jnz	loc_A15DDA
		mov	eax, [ebx]
		mov	[ebp+var_2C], eax

loc_A15E84:				; CODE XREF: sub_A15D28+14Cj
		mov	ecx, [ebp+var_4]
		xor	edx, edx

loc_A15E89:				; CODE XREF: sub_A15D28+E5j
		test	esi, esi
		js	loc_A16504
		mov	eax, [ecx+8]
		test	eax, eax
		jnz	short loc_A15EA2

loc_A15E98:				; CODE XREF: sub_A15D28+17Dj
					; sub_A15D28+1F8j ...
		mov	esi, 0C000000Dh
		jmp	loc_A16504
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15EA2:				; CODE XREF: sub_A15D28+16Ej
		cmp	dword ptr [ecx], 5
		jbe	short loc_A15E98
		mov	edi, edx

loc_A15EA9:				; CODE XREF: sub_A15D28+1BBj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15EB6
		xor	esi, esi
		jmp	short loc_A15EBE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15EB6:				; CODE XREF: sub_A15D28+188j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15EBE:				; CODE XREF: sub_A15D28+18Cj
		mov	[ebp+var_18], ecx
		test	esi, esi
		js	loc_A16504
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A16504
		mov	eax, [ebp+var_18]
		inc	edi
		cmp	edi, 5
		jb	short loc_A15EA9
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15EF2
		xor	esi, esi
		jmp	short loc_A15EFA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15EF2:				; CODE XREF: sub_A15D28+1C4j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15EFA:				; CODE XREF: sub_A15D28+1C8j
		test	esi, esi
		js	loc_A16504
		mov	eax, edx
		mov	[ebp+var_24], edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_28], eax
		test	esi, esi
		js	loc_A16504
		mov	ebx, [ebp+var_4]
		mov	eax, [ebx+8]
		test	eax, eax
		jz	loc_A15E98
		cmp	dword ptr [ebx], 6
		jbe	loc_A15E98
		xor	edi, edi

loc_A15F31:				; CODE XREF: sub_A15D28+243j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15F3E
		xor	esi, esi
		jmp	short loc_A15F46
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15F3E:				; CODE XREF: sub_A15D28+210j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15F46:				; CODE XREF: sub_A15D28+214j
		mov	[ebp+var_18], ecx
		test	esi, esi
		js	loc_A16504
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A16504
		mov	eax, [ebp+var_18]
		inc	edi
		cmp	edi, 6
		jb	short loc_A15F31
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15F7A
		xor	esi, esi
		jmp	short loc_A15F82
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15F7A:				; CODE XREF: sub_A15D28+24Cj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15F82:				; CODE XREF: sub_A15D28+250j
		test	esi, esi
		js	loc_A16504
		mov	eax, edx
		mov	[ebp+var_1C], edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_20], eax
		test	esi, esi
		js	loc_A16504
		mov	eax, [ebx+8]
		xor	edi, edi
		and	[ebp+var_14], edi
		test	eax, eax
		jnz	short loc_A15FB5

loc_A15FAC:				; CODE XREF: sub_A15D28+290j
		mov	esi, 0C000000Dh
		mov	ebx, edi
		jmp	short loc_A1602F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15FB5:				; CODE XREF: sub_A15D28+282j
		cmp	dword ptr [ebx], 7
		jbe	short loc_A15FAC
		xor	ebx, ebx

loc_A15FBC:				; CODE XREF: sub_A15D28+2C6j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15FC9
		xor	esi, esi
		jmp	short loc_A15FD1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15FC9:				; CODE XREF: sub_A15D28+29Bj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A15FD1:				; CODE XREF: sub_A15D28+29Fj
		mov	[ebp+var_18], ecx
		test	esi, esi
		js	short loc_A16015
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A16015
		mov	eax, [ebp+var_18]
		inc	ebx
		cmp	ebx, 7
		jb	short loc_A15FBC
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A15FFD
		xor	esi, esi
		jmp	short loc_A16005
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A15FFD:				; CODE XREF: sub_A15D28+2CFj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A16005:				; CODE XREF: sub_A15D28+2D3j
		test	esi, esi
		js	short loc_A16015
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A16018
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16015:				; CODE XREF: sub_A15D28+2AEj
					; sub_A15D28+2BDj ...
		mov	eax, [ebp+var_14]

loc_A16018:				; CODE XREF: sub_A15D28+2EBj
		test	esi, esi
		js	short loc_A1602C
		cmp	eax, 4
		jnz	loc_A15DDA
		mov	ebx, [edi]
		mov	[ebp+var_8], ebx
		jmp	short loc_A1602F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1602C:				; CODE XREF: sub_A15D28+2F2j
		mov	ebx, [ebp+var_8]

loc_A1602F:				; CODE XREF: sub_A15D28+28Bj
					; sub_A15D28+302j
		test	esi, esi
		js	loc_A16504
		xor	esi, esi
		test	ebx, ebx
		jz	short loc_A1606B
		push	20534C53h
		push	ebx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		mov	[ebp+var_10], edi
		test	edi, edi
		jnz	short loc_A1605D
		mov	esi, 0C0000017h
		jmp	loc_A16504
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1605D:				; CODE XREF: sub_A15D28+329j
		push	ebx		; size_t
		push	0		; int
		push	edi		; void *
		call	_memset
		add	esp, 0Ch
		jmp	short loc_A1606F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1606B:				; CODE XREF: sub_A15D28+313j
		mov	edi, [ebp+var_10]
		inc	esi

loc_A1606F:				; CODE XREF: sub_A15D28+341j
		mov	eax, ds:dword_A93EB0
		test	eax, eax
		jz	short loc_A16099
		neg	esi
		lea	ecx, [ebp+var_3C]
		push	ecx
		push	ebx
		sbb	esi, esi
		not	esi
		and	esi, edi
		push	esi
		push	[ebp+var_1C]
		push	[ebp+var_20]
		push	[ebp+var_24]
		push	[ebp+var_28]
		push	[ebp+var_2C]
		call	eax
		jmp	short loc_A1609E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16099:				; CODE XREF: sub_A15D28+34Ej
		mov	eax, 0C00000BBh

loc_A1609E:				; CODE XREF: sub_A15D28+36Fj
		and	[ebp+var_4], 0
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_4]
		xor	ecx, ecx
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1610A
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1610A
		lea	edx, [ebx+4]
		cmp	edx, 4
		jb	short loc_A16105
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1610A
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1610A
		mov	eax, [ebp+var_4]
		mov	[ebp+var_C], eax
		jmp	short loc_A1610D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16105:				; CODE XREF: sub_A15D28+3ACj
		mov	esi, 0C0000095h

loc_A1610A:				; CODE XREF: sub_A15D28+38Fj
					; sub_A15D28+3A4j ...
		mov	eax, [ebp+var_C]

loc_A1610D:				; CODE XREF: sub_A15D28+3DBj
		test	esi, esi
		js	loc_A164F2
		xor	edi, edi
		mov	[ebp+var_30], 8
		lea	ecx, [ebp+var_30]
		mov	edx, eax
		push	ecx
		push	8
		pop	ecx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A164F2
		mov	eax, [ebp+var_30]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A1614A
		mov	esi, 0C0000095h
		jmp	short loc_A16157
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1614A:				; CODE XREF: sub_A15D28+419j
		lea	edi, [ecx+8]
		cmp	edi, ecx
		jb	loc_A161D6
		xor	esi, esi

loc_A16157:				; CODE XREF: sub_A15D28+420j
		test	esi, esi
		js	loc_A164F2
		mov	ebx, [ebp+var_40]
		mov	edx, edi
		push	4
		pop	ecx
		mov	[ebp+var_4], ecx
		mov	eax, [ebx+10h]
		mov	ebx, [ebx+8]
		mov	[ebp+var_40], eax
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A164F2
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16194
		xor	esi, esi
		jmp	short loc_A1619C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16194:				; CODE XREF: sub_A15D28+466j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1619C:				; CODE XREF: sub_A15D28+46Aj
		mov	[ebp+var_4], ecx
		test	esi, esi
		js	loc_A164F2
		lea	eax, [ebp+var_4]
		mov	edx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A164F2
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A161D6
		mov	edx, [ebp+var_40]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		jmp	short loc_A161DB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A161D6:				; CODE XREF: sub_A15D28+427j
					; sub_A15D28+49Cj
		mov	esi, 0C0000095h

loc_A161DB:				; CODE XREF: sub_A15D28+4ACj
		test	esi, esi
		js	loc_A164F2
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jnz	short loc_A161F4
		mov	esi, 0C000000Dh
		jmp	loc_A164F2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A161F4:				; CODE XREF: sub_A15D28+4C0j
		mov	eax, [ebp+var_C]
		lea	ebx, [edi+4]
		xor	esi, esi
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A16209
		mov	esi, 0C000003Eh
		jmp	short loc_A16226
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16209:				; CODE XREF: sub_A15D28+4D8j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		test	eax, eax
		jnz	short loc_A16221
		mov	esi, 0C0000017h
		jmp	short loc_A16226
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16221:				; CODE XREF: sub_A15D28+4F0j
		mov	[edi+8], eax
		and	[edi], esi

loc_A16226:				; CODE XREF: sub_A15D28+4DFj
					; sub_A15D28+4F7j
		test	esi, esi
		js	loc_A164F2
		mov	eax, [edi+8]
		or	[ebp+var_14], 10000000h
		mov	[ebp+var_28], eax
		test	eax, eax
		jnz	short loc_A16258
		mov	ecx, [ebx]
		push	ebx
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A164F2
		inc	dword ptr [edi]
		jmp	short loc_A162D7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16258:				; CODE XREF: sub_A15D28+515j
		and	[ebp+var_2C], 0
		mov	ebx, eax
		mov	eax, [edi]
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_40], eax
		test	eax, eax
		jz	short loc_A16294

loc_A1626A:				; CODE XREF: sub_A15D28+56Aj
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A162B8
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A162CC
		mov	ecx, [ebp+var_2C]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_2C], ecx
		cmp	ecx, [ebp+var_40]
		jb	short loc_A1626A

loc_A16294:				; CODE XREF: sub_A15D28+540j
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A164ED
		mov	ecx, [edi+4]
		lea	eax, [ebx+8]
		add	ecx, [ebp+var_28]
		xor	esi, esi
		cmp	eax, ecx
		jbe	short loc_A162BF

loc_A162AE:				; CODE XREF: sub_A15D28+62Aj
					; sub_A15D28+736j ...
		mov	esi, 0C0000023h
		jmp	loc_A164F2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A162B8:				; CODE XREF: sub_A15D28+54Aj
		mov	esi, 0C0000095h
		jmp	short loc_A162CC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A162BF:				; CODE XREF: sub_A15D28+584j
		mov	eax, [ebp+var_14]
		mov	dword ptr [ebx], 4
		mov	[edx], eax
		inc	dword ptr [edi]

loc_A162CC:				; CODE XREF: sub_A15D28+55Bj
					; sub_A15D28+595j
		lea	ebx, [edi+4]
		test	esi, esi
		js	loc_A164F2

loc_A162D7:				; CODE XREF: sub_A15D28+52Ej
		mov	eax, [edi+8]
		mov	[ebp+var_28], eax
		test	eax, eax
		jnz	short loc_A162FA
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A164F2
		inc	dword ptr [edi]
		jmp	short loc_A16376
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A162FA:				; CODE XREF: sub_A15D28+5B7j
		and	[ebp+var_2C], 0
		mov	ebx, eax
		mov	eax, [edi]
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_40], eax
		test	eax, eax
		jz	short loc_A1633A

loc_A1630C:				; CODE XREF: sub_A15D28+610j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A163C5
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1636B
		mov	ecx, [ebp+var_2C]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_2C], ecx
		cmp	ecx, [ebp+var_40]
		jb	short loc_A1630C

loc_A1633A:				; CODE XREF: sub_A15D28+5E2j
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A164ED
		mov	ecx, [edi+4]
		lea	eax, [ebx+0Ch]
		add	ecx, [ebp+var_28]
		xor	esi, esi
		cmp	eax, ecx
		ja	loc_A162AE
		mov	eax, [ebp+var_34]
		mov	dword ptr [ebx], 8
		mov	[edx], eax
		mov	eax, [ebp+var_38]
		mov	[edx+4], eax
		inc	dword ptr [edi]

loc_A1636B:				; CODE XREF: sub_A15D28+601j
					; sub_A15D28+6A2j
		lea	ebx, [edi+4]
		test	esi, esi
		js	loc_A164F2

loc_A16376:				; CODE XREF: sub_A15D28+5D0j
		cmp	[ebp+var_10], 0
		mov	eax, [ebp+var_8]
		jnz	short loc_A163CC
		test	eax, eax
		jz	short loc_A163D0

loc_A16383:				; CODE XREF: sub_A15D28+6A6j
		mov	esi, 0C000000Dh

loc_A16388:				; CODE XREF: sub_A15D28+6D5j
					; sub_A15D28+758j
		test	esi, esi
		js	loc_A164F2
		lea	ebx, [edi+4]

loc_A16393:				; CODE XREF: sub_A15D28+6CEj
		mov	edx, [edi+8]
		mov	eax, [ebp+var_3C]
		mov	[ebp+var_2C], eax
		mov	[ebp+var_34], edx
		test	edx, edx
		jnz	loc_A16485
		mov	ecx, [ebx]
		push	ebx
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A164F2
		inc	dword ptr [edi]
		xor	esi, esi
		jmp	loc_A164F2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A163C5:				; CODE XREF: sub_A15D28+5ECj
		mov	esi, 0C0000095h
		jmp	short loc_A1636B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A163CC:				; CODE XREF: sub_A15D28+655j
		test	eax, eax
		jz	short loc_A16383

loc_A163D0:				; CODE XREF: sub_A15D28+659j
		mov	edx, [edi+8]
		mov	[ebp+var_34], edx
		test	edx, edx
		jnz	short loc_A163FF
		lea	edx, [eax+4]
		cmp	edx, 4
		jb	short loc_A163F8
		mov	ecx, [ebx]
		push	ebx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A164F2
		inc	dword ptr [edi]
		jmp	short loc_A16393
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A163F8:				; CODE XREF: sub_A15D28+6B8j
					; sub_A15D28+6F1j
		mov	esi, 0C0000095h
		jmp	short loc_A16388
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A163FF:				; CODE XREF: sub_A15D28+6B0j
		mov	eax, [edi]
		mov	ebx, edx
		and	[ebp+var_38], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_40], eax
		test	eax, eax
		jz	short loc_A16442

loc_A16411:				; CODE XREF: sub_A15D28+715j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A163F8
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A164F2
		mov	ecx, [ebp+var_38]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_38], ecx
		cmp	ecx, [ebp+var_40]
		jb	short loc_A16411
		mov	edx, [ebp+var_34]

loc_A16442:				; CODE XREF: sub_A15D28+6E7j
		lea	eax, [ebx+4]
		cmp	eax, ebx
		jb	loc_A164ED
		mov	ecx, [ebp+var_8]
		xor	esi, esi
		mov	eax, [edi+4]
		add	ecx, 4
		add	ecx, ebx
		add	eax, edx
		cmp	ecx, eax
		ja	loc_A162AE
		mov	ecx, [ebp+var_10]
		mov	eax, [ebp+var_8]
		mov	[ebx], eax
		test	ecx, ecx
		jz	short loc_A1647E
		push	eax		; size_t
		push	ecx		; void *
		lea	eax, [ebx+4]
		push	eax		; void *
		call	_memcpy
		add	esp, 0Ch

loc_A1647E:				; CODE XREF: sub_A15D28+746j
		inc	dword ptr [edi]
		jmp	loc_A16388
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16485:				; CODE XREF: sub_A15D28+679j
		mov	eax, [edi]
		mov	ebx, edx
		and	[ebp+var_38], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_40], eax
		test	eax, eax
		jz	short loc_A164C4

loc_A16497:				; CODE XREF: sub_A15D28+797j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A164ED
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A164F2
		mov	ecx, [ebp+var_38]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_38], ecx
		cmp	ecx, [ebp+var_40]
		jb	short loc_A16497
		mov	edx, [ebp+var_34]

loc_A164C4:				; CODE XREF: sub_A15D28+76Dj
		lea	eax, [ebx+4]
		cmp	eax, ebx
		jb	short loc_A164ED
		mov	ecx, [edi+4]
		lea	eax, [ebx+8]
		add	ecx, edx
		xor	esi, esi
		cmp	eax, ecx
		ja	loc_A162AE
		mov	eax, [ebp+var_2C]
		mov	dword ptr [ebx], 4
		mov	[ebx+4], eax
		inc	dword ptr [edi]
		jmp	short loc_A164F2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A164ED:				; CODE XREF: sub_A15D28+571j
					; sub_A15D28+617j ...
		mov	esi, 0C0000095h

loc_A164F2:				; CODE XREF: sub_A15D28+3E7j
					; sub_A15D28+408j ...
		mov	eax, [ebp+var_10]
		test	eax, eax
		jz	short loc_A16504
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A16504:				; CODE XREF: sub_A15D28+B7j
					; sub_A15D28+CEj ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A15D28	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1650D	proc near		; CODE XREF: sub_785212+1B0Dp

var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 44h
		push	ebx
		xor	ebx, ebx
		mov	eax, edx
		mov	[ebp+var_40], eax
		mov	edx, ecx
		mov	[ebp+var_C], edx
		mov	[ebp+var_18], ebx
		mov	[ebp+var_34], ebx
		mov	[ebp+var_38], ebx
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_10], ebx
		push	esi
		push	edi
		test	eax, eax
		jnz	short loc_A16547

loc_A1653D:				; CODE XREF: sub_A1650D+3Dj
		mov	esi, 0C000000Dh
		jmp	loc_A16A4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16547:				; CODE XREF: sub_A1650D+2Ej
		cmp	[ebp+arg_4], ebx
		jz	short loc_A1653D
		mov	eax, [edx+8]
		mov	edi, ebx
		mov	ecx, 0C000000Dh
		test	eax, eax
		jnz	short loc_A16561

loc_A1655A:				; CODE XREF: sub_A1650D+57j
		mov	esi, ecx
		jmp	loc_A165E4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16561:				; CODE XREF: sub_A1650D+4Bj
		cmp	dword ptr [edx], 3
		jbe	short loc_A1655A

loc_A16566:				; CODE XREF: sub_A1650D+8Bj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16573
		xor	esi, esi
		jmp	short loc_A1657B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16573:				; CODE XREF: sub_A1650D+60j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1657B:				; CODE XREF: sub_A1650D+64j
		mov	[ebp+var_4], ecx
		test	esi, esi
		js	short loc_A165BF
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A165BF
		mov	eax, [ebp+var_4]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A16566
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A165A7
		xor	esi, esi
		jmp	short loc_A165AF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A165A7:				; CODE XREF: sub_A1650D+94j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A165AF:				; CODE XREF: sub_A1650D+98j
		test	esi, esi
		js	short loc_A165BF
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A165C1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A165BF:				; CODE XREF: sub_A1650D+73j
					; sub_A1650D+82j ...
		mov	eax, edi

loc_A165C1:				; CODE XREF: sub_A1650D+B0j
		test	esi, esi
		js	short loc_A165DF
		cmp	eax, 8
		jz	short loc_A165D4
		mov	esi, 0C0000023h
		jmp	loc_A16A4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A165D4:				; CODE XREF: sub_A1650D+BBj
		mov	eax, [edi]
		mov	[ebp+var_34], eax
		mov	eax, [edi+4]
		mov	[ebp+var_38], eax

loc_A165DF:				; CODE XREF: sub_A1650D+B6j
		mov	edx, [ebp+var_C]
		xor	ebx, ebx

loc_A165E4:				; CODE XREF: sub_A1650D+4Fj
		test	esi, esi
		js	loc_A16A4F
		mov	eax, [edx+8]
		xor	edi, edi
		and	[ebp+var_24], edi
		mov	ecx, ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_3C], ecx
		test	eax, eax
		jnz	short loc_A1660A

loc_A16600:				; CODE XREF: sub_A1650D+100j
		mov	esi, 0C000000Dh
		jmp	loc_A166DB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1660A:				; CODE XREF: sub_A1650D+F1j
		cmp	dword ptr [edx], 4
		jbe	short loc_A16600
		and	[ebp+var_20], edi

loc_A16612:				; CODE XREF: sub_A1650D+145j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1661F
		xor	esi, esi
		jmp	short loc_A16627
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1661F:				; CODE XREF: sub_A1650D+10Cj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A16627:				; CODE XREF: sub_A1650D+110j
		mov	[ebp+var_8], ecx
		test	esi, esi
		js	loc_A166D8
		lea	eax, [ebp+var_8]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A166D8
		mov	edx, [ebp+var_20]
		mov	eax, [ebp+var_8]
		inc	edx
		mov	[ebp+var_20], edx
		cmp	edx, 4
		jb	short loc_A16612
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16661
		xor	esi, esi
		jmp	short loc_A16669
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16661:				; CODE XREF: sub_A1650D+14Ej
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A16669:				; CODE XREF: sub_A1650D+152j
		test	esi, esi
		js	short loc_A166D8
		mov	ebx, edx
		mov	edi, edx
		neg	ebx
		sbb	ebx, ebx
		and	ebx, ecx
		test	esi, esi
		js	short loc_A166D8
		test	edi, edi
		jnz	short loc_A166A4

loc_A1667F:				; CODE XREF: sub_A1650D+19Dj
					; sub_A1650D+1AAj ...
		mov	esi, 0C000003Eh

loc_A16684:				; CODE XREF: sub_A1650D+1FCj
		test	esi, esi
		js	loc_A16A4F

loc_A1668C:				; CODE XREF: sub_A1650D+20Fj
		mov	ebx, [ebp+var_C]
		mov	eax, [ebx+8]
		test	eax, eax
		jnz	loc_A16721

loc_A1669A:				; CODE XREF: sub_A1650D+217j
					; sub_A1650D+293j ...
		mov	esi, 0C000000Dh
		jmp	loc_A16A3D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A166A4:				; CODE XREF: sub_A1650D+170j
		test	edi, 1
		jnz	short loc_A1667F
		mov	eax, edi
		xor	ecx, ecx
		shr	eax, 1
		cmp	cx, [ebx+eax*2-2]
		jnz	short loc_A1667F
		lea	eax, [ebp+var_24]
		mov	edx, edi
		push	eax
		mov	ecx, ebx
		call	_StringCbLengthW@12 ; StringCbLengthW(x,x,x)
		test	eax, eax
		js	short loc_A1667F
		mov	ecx, [ebp+var_24]
		lea	eax, [ecx+2]
		cmp	eax, edi
		jnz	short loc_A1667F
		shr	ecx, 1
		jmp	short loc_A166DE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A166D8:				; CODE XREF: sub_A1650D+11Fj
					; sub_A1650D+132j ...
		mov	ecx, [ebp+var_3C]

loc_A166DB:				; CODE XREF: sub_A1650D+F8j
		mov	ebx, [ebp+var_4]

loc_A166DE:				; CODE XREF: sub_A1650D+1C9j
		test	esi, esi
		js	loc_A16A4F
		lea	edi, ds:2[ecx*2]
		test	edi, edi
		jz	short loc_A1667F
		push	20534C53h
		push	edi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A1670E
		mov	esi, 0C0000017h
		jmp	loc_A16684
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1670E:				; CODE XREF: sub_A1650D+1F5j
		push	edi		; size_t
		push	ebx		; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	[ebp+var_1C], esi
		jmp	loc_A1668C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16721:				; CODE XREF: sub_A1650D+187j
		cmp	dword ptr [ebx], 5
		jbe	loc_A1669A
		xor	edi, edi

loc_A1672C:				; CODE XREF: sub_A1650D+259j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16739
		xor	esi, esi
		jmp	short loc_A16741
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16739:				; CODE XREF: sub_A1650D+226j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A16741:				; CODE XREF: sub_A1650D+22Aj
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	loc_A16A3D
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A16A3D
		mov	eax, [ebp+var_C]
		inc	edi
		cmp	edi, 5
		jb	short loc_A1672C
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16775
		xor	esi, esi
		jmp	short loc_A1677D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16775:				; CODE XREF: sub_A1650D+262j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1677D:				; CODE XREF: sub_A1650D+266j
		test	esi, esi
		js	loc_A16A3D
		mov	eax, edx
		mov	[ebp+var_28], edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_2C], eax
		test	esi, esi
		js	loc_A16A3D
		mov	eax, [ebx+8]
		test	eax, eax
		jz	loc_A1669A
		cmp	dword ptr [ebx], 6
		jbe	loc_A1669A
		xor	edi, edi

loc_A167B1:				; CODE XREF: sub_A1650D+2D6j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A167BE
		xor	esi, esi
		jmp	short loc_A167C6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A167BE:				; CODE XREF: sub_A1650D+2ABj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A167C6:				; CODE XREF: sub_A1650D+2AFj
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	short loc_A16808
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A16808
		mov	eax, [ebp+var_C]
		inc	edi
		cmp	edi, 6
		jb	short loc_A167B1
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A167F2
		xor	esi, esi
		jmp	short loc_A167FA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A167F2:				; CODE XREF: sub_A1650D+2DFj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A167FA:				; CODE XREF: sub_A1650D+2E3j
		test	esi, esi
		js	short loc_A16808
		mov	ebx, edx
		neg	edx
		sbb	edx, edx
		and	edx, ecx
		jmp	short loc_A1680D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16808:				; CODE XREF: sub_A1650D+2BEj
					; sub_A1650D+2CDj ...
		mov	edx, [ebp+var_10]
		mov	ebx, edx

loc_A1680D:				; CODE XREF: sub_A1650D+2F9j
		test	esi, esi
		js	loc_A16A3D
		mov	eax, ds:dword_A93E98
		test	eax, eax
		jz	short loc_A1682F
		push	ebx
		push	edx
		push	[ebp+var_28]
		push	[ebp+var_2C]
		push	[ebp+var_1C]
		call	eax
		mov	edi, eax
		jmp	short loc_A16834
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1682F:				; CODE XREF: sub_A1650D+30Fj
		mov	edi, 0C00000BBh

loc_A16834:				; CODE XREF: sub_A1650D+320j
		mov	esi, edi
		test	edi, edi
		js	loc_A16A3D
		push	8
		pop	ecx
		mov	[ebp+var_2C], ecx
		lea	eax, [ebp+var_2C]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1685E
		mov	eax, [ebp+var_2C]
		mov	[ebp+var_18], eax
		jmp	short loc_A16861
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1685E:				; CODE XREF: sub_A1650D+347j
		mov	eax, [ebp+var_18]

loc_A16861:				; CODE XREF: sub_A1650D+34Fj
		test	esi, esi
		js	loc_A16A3D
		push	8
		pop	esi
		xor	ebx, ebx
		mov	[ebp+var_30], esi
		lea	ecx, [ebp+var_30]
		mov	edx, eax
		push	ecx
		mov	ecx, esi
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A16A3D
		mov	eax, [ebp+var_30]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A1689C
		mov	esi, 0C0000095h
		jmp	short loc_A168A9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1689C:				; CODE XREF: sub_A1650D+386j
		lea	ebx, [ecx+8]
		cmp	ebx, ecx
		jb	loc_A1692C
		xor	esi, esi

loc_A168A9:				; CODE XREF: sub_A1650D+38Dj
		test	esi, esi
		js	loc_A16A3D
		mov	ecx, [ebp+var_40]
		mov	edx, ebx
		push	4
		mov	eax, [ecx+10h]
		mov	[ebp+var_3C], eax
		mov	eax, [ecx+8]
		mov	[ebp+var_40], eax
		lea	eax, [ebp+var_4]
		pop	ecx
		push	eax
		mov	[ebp+var_4], ecx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A16A3D
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A168E9
		xor	esi, esi
		jmp	short loc_A168F1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A168E9:				; CODE XREF: sub_A1650D+3D6j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A168F1:				; CODE XREF: sub_A1650D+3DAj
		mov	[ebp+var_4], ecx
		test	esi, esi
		js	loc_A16A3D
		mov	edx, [ebp+var_40]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A16A3D
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1692C
		mov	edx, [ebp+var_3C]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		jmp	short loc_A16931
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1692C:				; CODE XREF: sub_A1650D+394j
					; sub_A1650D+40Dj
		mov	esi, 0C0000095h

loc_A16931:				; CODE XREF: sub_A1650D+41Dj
		test	esi, esi
		js	loc_A16A3D
		mov	esi, [ebp+arg_4]
		mov	eax, [ebp+var_18]
		lea	ebx, [esi+4]
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A16952
		mov	esi, 0C000003Eh
		jmp	loc_A16A3D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16952:				; CODE XREF: sub_A1650D+439j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A1696F
		mov	esi, 0C0000017h
		jmp	loc_A16A3D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1696F:				; CODE XREF: sub_A1650D+456j
		mov	[esi+8], edx
		and	dword ptr [esi], 0
		or	edi, 10000000h
		lea	esi, [edx+4]
		cmp	esi, edx
		jb	loc_A16A38
		mov	ecx, [ebx]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		jbe	short loc_A1699B

loc_A16991:				; CODE XREF: sub_A1650D+50Dj
		mov	esi, 0C0000023h
		jmp	loc_A16A3D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1699B:				; CODE XREF: sub_A1650D+482j
		mov	dword ptr [edx], 4
		mov	[esi], edi
		mov	edi, [ebp+arg_4]
		inc	dword ptr [edi]
		mov	ecx, [edi]
		mov	[ebp+var_40], ecx
		mov	eax, [edi+8]
		mov	[ebp+var_3C], eax
		test	eax, eax
		jnz	short loc_A169CE
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A16A3D
		inc	dword ptr [edi]
		xor	esi, esi
		jmp	short loc_A16A3D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A169CE:				; CODE XREF: sub_A1650D+4A8j
		and	[ebp+var_2C], 0
		mov	edi, eax
		mov	[ebp+var_18], edi
		test	ecx, ecx
		jz	short loc_A16A08

loc_A169DB:				; CODE XREF: sub_A1650D+4F6j
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A16A38
		lea	eax, [ebp+var_18]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A16A3D
		mov	ecx, [ebp+var_2C]
		mov	edi, [ebp+var_18]
		inc	ecx
		mov	[ebp+var_2C], ecx
		cmp	ecx, [ebp+var_40]
		jb	short loc_A169DB
		mov	eax, [ebp+var_3C]

loc_A16A08:				; CODE XREF: sub_A1650D+4CCj
		lea	edx, [edi+4]
		cmp	edx, edi
		jb	short loc_A16A38
		mov	ecx, [ebx]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [edi+0Ch]
		cmp	eax, ecx
		ja	loc_A16991
		mov	eax, [ebp+var_34]
		mov	dword ptr [edi], 8
		mov	[edx], eax
		mov	eax, [ebp+var_38]
		mov	[edx+4], eax
		mov	eax, [ebp+arg_4]
		inc	dword ptr [eax]
		jmp	short loc_A16A3D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16A38:				; CODE XREF: sub_A1650D+473j
					; sub_A1650D+4D6j ...
		mov	esi, 0C0000095h

loc_A16A3D:				; CODE XREF: sub_A1650D+192j
					; sub_A1650D+239j ...
		mov	eax, [ebp+var_1C]
		test	eax, eax
		jz	short loc_A16A4F
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A16A4F:				; CODE XREF: sub_A1650D+35j
					; sub_A1650D+C2j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1650D	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A16A58	proc near		; CODE XREF: sub_785212+1A46p

Source2		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 44h
		xor	edx, edx
		mov	[ebp+var_8], ecx
		mov	[ebp+var_2C], edx
		mov	[ebp+var_30], edx
		mov	[ebp+var_C], edx
		mov	[ebp+var_4], edx
		push	ebx
		push	esi
		push	edi
		test	ecx, ecx
		jnz	short loc_A16A82

loc_A16A78:				; CODE XREF: sub_A16A58+1A7j
		mov	esi, 0C000000Dh
		jmp	loc_A16F73
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16A82:				; CODE XREF: sub_A16A58+1Ej
		mov	ebx, [ebp+arg_4]
		mov	esi, 0C000000Dh
		test	ebx, ebx
		jz	loc_A16F73
		mov	eax, [ecx+8]
		mov	edi, edx
		test	eax, eax
		jz	loc_A16B2F
		cmp	dword ptr [ecx], 3
		jbe	loc_A16B2F
		mov	[ebp+var_14], edx

loc_A16AAB:				; CODE XREF: sub_A16A58+8Bj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16AB8
		xor	esi, esi
		jmp	short loc_A16AC0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16AB8:				; CODE XREF: sub_A16A58+5Aj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A16AC0:				; CODE XREF: sub_A16A58+5Ej
		mov	[ebp+arg_4], ecx
		test	esi, esi
		js	short loc_A16B0A
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A16B0A
		mov	edx, [ebp+var_14]
		mov	eax, [ebp+arg_4]
		inc	edx
		mov	[ebp+var_14], edx
		cmp	edx, 3
		jb	short loc_A16AAB
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16AF2
		xor	esi, esi
		jmp	short loc_A16AFA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16AF2:				; CODE XREF: sub_A16A58+94j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A16AFA:				; CODE XREF: sub_A16A58+98j
		test	esi, esi
		js	short loc_A16B0A
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A16B0C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16B0A:				; CODE XREF: sub_A16A58+6Dj
					; sub_A16A58+7Cj ...
		mov	eax, edi

loc_A16B0C:				; CODE XREF: sub_A16A58+B0j
		test	esi, esi
		js	short loc_A16B2A
		cmp	eax, 8
		jz	short loc_A16B1F

loc_A16B15:				; CODE XREF: sub_A16A58+475j
					; sub_A16A58+501j
		mov	esi, 0C0000023h
		jmp	loc_A16F73
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16B1F:				; CODE XREF: sub_A16A58+BBj
		mov	eax, [edi]
		mov	[ebp+var_2C], eax
		mov	eax, [edi+4]
		mov	[ebp+var_30], eax

loc_A16B2A:				; CODE XREF: sub_A16A58+B6j
		mov	ecx, [ebp+var_8]
		xor	edx, edx

loc_A16B2F:				; CODE XREF: sub_A16A58+41j
					; sub_A16A58+4Aj
		test	esi, esi
		js	loc_A16F73
		mov	eax, [ecx+8]
		mov	edi, edx
		mov	[ebp+var_10], edx
		test	eax, eax
		jnz	short loc_A16B4D

loc_A16B43:				; CODE XREF: sub_A16A58+F8j
		mov	esi, 0C000000Dh
		jmp	loc_A16BD8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16B4D:				; CODE XREF: sub_A16A58+E9j
		cmp	dword ptr [ecx], 4
		jbe	short loc_A16B43
		mov	[ebp+var_14], edx

loc_A16B55:				; CODE XREF: sub_A16A58+135j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16B62
		xor	esi, esi
		jmp	short loc_A16B6A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16B62:				; CODE XREF: sub_A16A58+104j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A16B6A:				; CODE XREF: sub_A16A58+108j
		mov	[ebp+arg_4], ecx
		test	esi, esi
		js	short loc_A16BB4
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A16BB4
		mov	edx, [ebp+var_14]
		mov	eax, [ebp+arg_4]
		inc	edx
		mov	[ebp+var_14], edx
		cmp	edx, 4
		jb	short loc_A16B55
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16B9C
		xor	esi, esi
		jmp	short loc_A16BA4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16B9C:				; CODE XREF: sub_A16A58+13Ej
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A16BA4:				; CODE XREF: sub_A16A58+142j
		test	esi, esi
		js	short loc_A16BB4
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A16BB7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16BB4:				; CODE XREF: sub_A16A58+117j
					; sub_A16A58+126j ...
		mov	eax, [ebp+var_10]

loc_A16BB7:				; CODE XREF: sub_A16A58+15Aj
		test	esi, esi
		js	short loc_A16BD6
		cmp	eax, 8
		jz	short loc_A16BCA

loc_A16BC0:				; CODE XREF: sub_A16A58+438j
		mov	esi, 0C000003Eh
		jmp	loc_A16F73
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16BCA:				; CODE XREF: sub_A16A58+166j
		mov	eax, [edi+4]
		xor	edx, edx
		mov	ecx, [edi]
		mov	[ebp+var_3C], eax
		jmp	short loc_A16BDB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16BD6:				; CODE XREF: sub_A16A58+161j
		xor	edx, edx

loc_A16BD8:				; CODE XREF: sub_A16A58+F0j
		mov	ecx, [ebp+var_C]

loc_A16BDB:				; CODE XREF: sub_A16A58+17Cj
		test	esi, esi
		js	loc_A16F73
		mov	[ebp+var_10], edx
		mov	edi, edx
		mov	[ebp+var_C], edx
		mov	[ebp+var_1C], edx
		mov	[ebp+var_20], edx
		mov	[ebp+var_24], edx
		mov	[ebp+var_28], edx
		mov	[ebp+Source2], edx
		mov	[ebp+var_3C], edx
		test	ecx, ecx
		jz	loc_A16A78
		mov	eax, ds:_IoFileObjectType
		push	edx
		mov	[ebp+arg_4], edx
		lea	edx, [ebp+arg_4]
		push	edx
		push	1
		push	eax
		push	0
		push	ecx
		call	_ObReferenceObjectByHandle@24 ;	ObReferenceObjectByHandle(x,x,x,x,x,x)
		mov	esi, eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+arg_4], eax
		test	esi, esi
		js	loc_A16E1D
		push	20534C53h
		push	1Fh
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		mov	[ebp+var_14], edi
		test	edi, edi
		jnz	short loc_A16C4E
		mov	esi, 0C0000017h
		jmp	loc_A16E1A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16C4E:				; CODE XREF: sub_A16A58+1EAj
		xor	ecx, ecx
		xor	eax, eax
		mov	[edi+5], ecx
		mov	[edi+9], ecx
		mov	[edi+0Dh], ecx
		mov	[edi+11h], ecx
		mov	[edi+15h], ecx
		mov	[edi+19h], ecx
		mov	[edi+1Dh], ax
		mov	[edi], ecx
		push	6
		mov	byte ptr [edi+4], 19h
		add	edi, 5
		mov	esi, ds:off_A42124
		pop	ecx
		rep movsd
		push	20534C53h
		push	3Ah
		push	1
		movsb
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		mov	[ebp+var_10], esi
		test	esi, esi
		jnz	short loc_A16C9E
		mov	esi, 0C0000017h
		jmp	loc_A16E17
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16C9E:				; CODE XREF: sub_A16A58+23Aj
		push	3Ah		; size_t
		push	0		; int
		push	esi		; void *
		call	_memset
		mov	edi, [ebp+var_14]
		lea	eax, [ebp+var_C]
		add	esp, 0Ch
		push	eax
		push	1
		push	0
		push	1Fh
		push	edi
		push	1
		push	3Ah
		push	esi
		push	[ebp+arg_4]
		call	FsRtlQueryKernelEaFile
		mov	esi, eax
		cmp	esi, 0C0000225h
		jnz	short loc_A16CDB
		and	[ebp+var_4], 0

loc_A16CD4:				; CODE XREF: sub_A16A58+2C7j
		xor	esi, esi
		jmp	loc_A16E1A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16CDB:				; CODE XREF: sub_A16A58+276j
		test	esi, esi
		js	loc_A16E1A
		mov	ecx, [ebp+var_10]
		movzx	eax, byte ptr [ecx+5]
		lea	edx, [ecx+9]
		add	edx, eax
		movzx	eax, word ptr [ecx+6]
		movzx	ecx, ax
		mov	[ebp+var_8], eax
		add	ecx, edx
		mov	eax, [ebp+var_C]
		add	eax, [ebp+var_10]
		mov	[ebp+var_18], edx
		cmp	ecx, eax
		jbe	short loc_A16D12

loc_A16D08:				; CODE XREF: sub_A16A58+2CDj
					; sub_A16A58+2E1j
		mov	esi, 0C000003Eh
		jmp	loc_A16E1A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16D12:				; CODE XREF: sub_A16A58+2AEj
		mov	eax, [ebp+var_8]
		xor	ecx, ecx
		cmp	cx, ax
		jnz	short loc_A16D21
		and	[ebp+var_4], ecx
		jmp	short loc_A16CD4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16D21:				; CODE XREF: sub_A16A58+2C2j
		cmp	ax, 18h
		jnz	short loc_A16D08
		push	8		; Length
		lea	eax, [ebp+Source2]
		push	eax		; Source2
		lea	eax, [edx+10h]
		push	eax		; Source1
		call	_RtlCompareMemory@12 ; RtlCompareMemory(x,x,x)
		cmp	eax, 8
		jnz	short loc_A16D08
		and	[ebp+var_8], 0
		push	20534C53h
		push	248h
		push	1
		mov	[ebp+var_4], 2
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		test	edi, edi
		jz	loc_A16E17
		lea	eax, [ebp+var_8]
		push	eax		; int
		push	248h		; int
		push	edi		; void *
		push	0		; size_t
		push	0		; void *
		push	900F4h		; int
		push	[ebp+arg_4]	; int
		call	FsRtlKernelFsControlFile
		mov	[ebp+var_C], eax
		test	eax, eax
		js	short loc_A16DDD
		cmp	[ebp+var_8], 40h
		jnb	short loc_A16D92

loc_A16D89:				; CODE XREF: sub_A16A58+36Bj
		mov	[ebp+var_C], 0C000003Eh
		jmp	short loc_A16DDD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16D92:				; CODE XREF: sub_A16A58+32Fj
		mov	eax, [edi]
		mov	[ebp+var_34], eax
		mov	eax, [edi+4]
		mov	[ebp+var_38], eax
		lea	eax, [ebp+var_8]
		push	eax		; int
		push	248h		; int
		push	edi		; void *
		push	0		; size_t
		push	0		; void *
		push	900EBh		; int
		push	[ebp+arg_4]	; int
		call	FsRtlKernelFsControlFile
		mov	[ebp+var_C], eax
		test	eax, eax
		js	short loc_A16DDD
		cmp	[ebp+var_8], 40h
		jb	short loc_A16D89
		mov	eax, [edi+18h]
		mov	[ebp+var_24], eax
		mov	eax, [edi+1Ch]
		mov	[ebp+var_28], eax
		mov	eax, [ebp+var_34]
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+var_38]
		mov	[ebp+var_20], eax

loc_A16DDD:				; CODE XREF: sub_A16A58+329j
					; sub_A16A58+338j ...
		push	20534C53h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		cmp	[ebp+var_C], 0
		jl	short loc_A16E17
		mov	eax, [ebp+var_18]
		mov	ecx, [ebp+var_1C]
		cmp	ecx, [eax]
		jnz	short loc_A16E17
		mov	ecx, [ebp+var_20]
		cmp	ecx, [eax+4]
		jnz	short loc_A16E17
		mov	ecx, [ebp+var_24]
		cmp	ecx, [eax+8]
		jnz	short loc_A16E17
		mov	ecx, [ebp+var_28]
		cmp	ecx, [eax+0Ch]
		jnz	short loc_A16E17
		mov	[ebp+var_4], 3

loc_A16E17:				; CODE XREF: sub_A16A58+241j
					; sub_A16A58+303j ...
		mov	edi, [ebp+var_14]

loc_A16E1A:				; CODE XREF: sub_A16A58+1F1j
					; sub_A16A58+27Ej ...
		mov	eax, [ebp+arg_4]

loc_A16E1D:				; CODE XREF: sub_A16A58+1CFj
		test	eax, eax
		jz	short loc_A16E28
		mov	ecx, eax
		call	ObfDereferenceObject

loc_A16E28:				; CODE XREF: sub_A16A58+3C7j
		test	edi, edi
		jz	short loc_A16E37
		push	20534C53h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A16E37:				; CODE XREF: sub_A16A58+3D2j
		mov	eax, [ebp+var_10]
		test	eax, eax
		jz	short loc_A16E49
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A16E49:				; CODE XREF: sub_A16A58+3E4j
		test	esi, esi
		js	loc_A16F73
		and	[ebp+arg_4], 0
		lea	eax, [ebp+arg_4]
		xor	ecx, ecx
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A16F73
		mov	ecx, [ebp+arg_4]
		lea	eax, [ebp+arg_4]
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A16F73
		mov	eax, [ebp+arg_4]
		lea	esi, [ebx+4]
		mov	[esi], eax
		test	eax, eax
		jz	loc_A16BC0
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A16EB3
		mov	esi, 0C0000017h
		jmp	loc_A16F73
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16EB3:				; CODE XREF: sub_A16A58+44Fj
		mov	[ebx+8], edx
		and	dword ptr [ebx], 0
		lea	edi, [edx+4]
		cmp	edi, edx
		jb	loc_A16F6E
		mov	ecx, [esi]
		lea	eax, [edx+0Ch]
		add	ecx, edx
		cmp	eax, ecx
		ja	loc_A16B15
		mov	eax, [ebp+var_2C]
		mov	dword ptr [edx], 8
		mov	[edi], eax
		mov	eax, [ebp+var_30]
		mov	[edi+4], eax
		inc	dword ptr [ebx]
		mov	ecx, [ebx]
		mov	[ebp+var_38], ecx
		mov	eax, [ebx+8]
		mov	[ebp+var_34], eax
		test	eax, eax
		jnz	short loc_A16F0C
		mov	ecx, [esi]
		push	esi
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A16F73
		inc	dword ptr [ebx]
		xor	esi, esi
		jmp	short loc_A16F73
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16F0C:				; CODE XREF: sub_A16A58+49Bj
		and	[ebp+var_30], 0
		mov	edi, eax
		mov	[ebp+arg_4], edi
		test	ecx, ecx
		jz	short loc_A16F46

loc_A16F19:				; CODE XREF: sub_A16A58+4E9j
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A16F6E
		lea	eax, [ebp+arg_4]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A16F73
		mov	ecx, [ebp+var_30]
		mov	edi, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_30], ecx
		cmp	ecx, [ebp+var_38]
		jb	short loc_A16F19
		mov	eax, [ebp+var_34]

loc_A16F46:				; CODE XREF: sub_A16A58+4BFj
		lea	edx, [edi+4]
		cmp	edx, edi
		jb	short loc_A16F6E
		mov	ecx, [ebx+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [edi+8]
		cmp	eax, ecx
		ja	loc_A16B15
		mov	eax, [ebp+var_4]
		mov	dword ptr [edi], 4
		mov	[edx], eax
		inc	dword ptr [ebx]
		jmp	short loc_A16F73
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16F6E:				; CODE XREF: sub_A16A58+466j
					; sub_A16A58+4C9j ...
		mov	esi, 0C0000095h

loc_A16F73:				; CODE XREF: sub_A16A58+25j
					; sub_A16A58+34j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A16A58	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A16F7C	proc near		; CODE XREF: sub_785212+156Cp

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		xor	eax, eax
		mov	[ebp+var_4], ecx
		and	[ebp+var_C], eax
		mov	[ebp+var_1C], eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_8], eax
		push	ebx
		push	esi
		push	edi
		test	ecx, ecx
		jnz	short loc_A16FA9

loc_A16F9F:				; CODE XREF: sub_A16F7C+32j
					; sub_A16F7C+210j ...
		mov	esi, 0C000000Dh
		jmp	loc_A175D2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16FA9:				; CODE XREF: sub_A16F7C+21j
		mov	ebx, [ebp+arg_4]
		test	ebx, ebx
		jz	short loc_A16F9F
		and	[ebp+var_10], eax
		xor	edi, edi
		mov	eax, [ecx+8]
		test	eax, eax
		jnz	short loc_A16FC6

loc_A16FBC:				; CODE XREF: sub_A16F7C+4Dj
		mov	esi, 0C000000Dh
		jmp	loc_A1704B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16FC6:				; CODE XREF: sub_A16F7C+3Ej
		cmp	dword ptr [ecx], 3
		jbe	short loc_A16FBC
		and	[ebp+var_14], edi

loc_A16FCE:				; CODE XREF: sub_A16F7C+8Aj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A16FDB
		xor	esi, esi
		jmp	short loc_A16FE3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A16FDB:				; CODE XREF: sub_A16F7C+59j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A16FE3:				; CODE XREF: sub_A16F7C+5Dj
		mov	[ebp+arg_4], ecx
		test	esi, esi
		js	short loc_A1702D
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1702D
		mov	edx, [ebp+var_14]
		mov	eax, [ebp+arg_4]
		inc	edx
		mov	[ebp+var_14], edx
		cmp	edx, 3
		jb	short loc_A16FCE
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17015
		xor	esi, esi
		jmp	short loc_A1701D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17015:				; CODE XREF: sub_A16F7C+93j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1701D:				; CODE XREF: sub_A16F7C+97j
		test	esi, esi
		js	short loc_A1702D
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A17030
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1702D:				; CODE XREF: sub_A16F7C+6Cj
					; sub_A16F7C+7Bj ...
		mov	eax, [ebp+var_10]

loc_A17030:				; CODE XREF: sub_A16F7C+AFj
		test	esi, esi
		js	short loc_A17048
		cmp	eax, 8
		jnz	loc_A17585
		mov	eax, [edi]
		mov	[ebp+var_1C], eax
		mov	eax, [edi+4]
		mov	[ebp+var_14], eax

loc_A17048:				; CODE XREF: sub_A16F7C+B6j
		mov	ecx, [ebp+var_4]

loc_A1704B:				; CODE XREF: sub_A16F7C+45j
		test	esi, esi
		js	loc_A175D2
		mov	eax, [ecx+8]
		xor	edi, edi
		and	[ebp+var_10], edi
		test	eax, eax
		jnz	short loc_A17066

loc_A1705F:				; CODE XREF: sub_A16F7C+EDj
		mov	esi, 0C000000Dh
		jmp	short loc_A170E5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17066:				; CODE XREF: sub_A16F7C+E1j
		cmp	dword ptr [ecx], 4
		jbe	short loc_A1705F
		and	[ebp+var_14], edi

loc_A1706E:				; CODE XREF: sub_A16F7C+12Aj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1707B
		xor	esi, esi
		jmp	short loc_A17083
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1707B:				; CODE XREF: sub_A16F7C+F9j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17083:				; CODE XREF: sub_A16F7C+FDj
		mov	[ebp+arg_4], ecx
		test	esi, esi
		js	short loc_A170CD
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A170CD
		mov	edx, [ebp+var_14]
		mov	eax, [ebp+arg_4]
		inc	edx
		mov	[ebp+var_14], edx
		cmp	edx, 4
		jb	short loc_A1706E
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A170B5
		xor	esi, esi
		jmp	short loc_A170BD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A170B5:				; CODE XREF: sub_A16F7C+133j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A170BD:				; CODE XREF: sub_A16F7C+137j
		test	esi, esi
		js	short loc_A170CD
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A170D0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A170CD:				; CODE XREF: sub_A16F7C+10Cj
					; sub_A16F7C+11Bj ...
		mov	eax, [ebp+var_10]

loc_A170D0:				; CODE XREF: sub_A16F7C+14Fj
		test	esi, esi
		js	short loc_A170E2
		cmp	eax, 4
		jnz	loc_A17562
		mov	eax, [edi]
		mov	[ebp+var_20], eax

loc_A170E2:				; CODE XREF: sub_A16F7C+156j
		mov	ecx, [ebp+var_4]

loc_A170E5:				; CODE XREF: sub_A16F7C+E8j
		test	esi, esi
		js	loc_A175D2
		mov	eax, [ecx+8]
		xor	edi, edi
		and	[ebp+var_10], edi
		test	eax, eax
		jnz	short loc_A17100

loc_A170F9:				; CODE XREF: sub_A16F7C+187j
		mov	esi, 0C000000Dh
		jmp	short loc_A1717F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17100:				; CODE XREF: sub_A16F7C+17Bj
		cmp	dword ptr [ecx], 5
		jbe	short loc_A170F9
		and	[ebp+var_14], edi

loc_A17108:				; CODE XREF: sub_A16F7C+1C4j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17115
		xor	esi, esi
		jmp	short loc_A1711D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17115:				; CODE XREF: sub_A16F7C+193j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1711D:				; CODE XREF: sub_A16F7C+197j
		mov	[ebp+arg_4], ecx
		test	esi, esi
		js	short loc_A17167
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A17167
		mov	edx, [ebp+var_14]
		mov	eax, [ebp+arg_4]
		inc	edx
		mov	[ebp+var_14], edx
		cmp	edx, 5
		jb	short loc_A17108
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1714F
		xor	esi, esi
		jmp	short loc_A17157
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1714F:				; CODE XREF: sub_A16F7C+1CDj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17157:				; CODE XREF: sub_A16F7C+1D1j
		test	esi, esi
		js	short loc_A17167
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A1716A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17167:				; CODE XREF: sub_A16F7C+1A6j
					; sub_A16F7C+1B5j ...
		mov	eax, [ebp+var_10]

loc_A1716A:				; CODE XREF: sub_A16F7C+1E9j
		test	esi, esi
		js	short loc_A1717C
		cmp	eax, 4
		jnz	loc_A17562
		mov	eax, [edi]
		mov	[ebp+var_24], eax

loc_A1717C:				; CODE XREF: sub_A16F7C+1F0j
		mov	ecx, [ebp+var_4]

loc_A1717F:				; CODE XREF: sub_A16F7C+182j
		test	esi, esi
		js	loc_A175D2
		mov	eax, [ecx+8]
		test	eax, eax
		jz	loc_A16F9F
		cmp	dword ptr [ecx], 6
		jbe	loc_A16F9F
		xor	edi, edi

loc_A1719D:				; CODE XREF: sub_A16F7C+253j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A171AA
		xor	esi, esi
		jmp	short loc_A171B2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A171AA:				; CODE XREF: sub_A16F7C+228j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A171B2:				; CODE XREF: sub_A16F7C+22Cj
		mov	[ebp+arg_4], ecx
		test	esi, esi
		js	short loc_A171F7
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A171F7
		mov	eax, [ebp+arg_4]
		inc	edi
		cmp	edi, 6
		jb	short loc_A1719D
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A171DE
		xor	esi, esi
		jmp	short loc_A171E6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A171DE:				; CODE XREF: sub_A16F7C+25Cj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A171E6:				; CODE XREF: sub_A16F7C+260j
		test	esi, esi
		js	short loc_A171F7
		mov	eax, edx
		neg	edx
		sbb	edx, edx
		and	edx, ecx
		mov	[ebp+var_8], edx
		jmp	short loc_A171FD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A171F7:				; CODE XREF: sub_A16F7C+23Bj
					; sub_A16F7C+24Aj ...
		mov	edx, [ebp+var_8]
		mov	eax, [ebp+var_C]

loc_A171FD:				; CODE XREF: sub_A16F7C+279j
		test	esi, esi
		js	loc_A175D2
		cmp	eax, 10h
		jnz	loc_A16F9F
		mov	ecx, [ebp+var_1C]
		lea	edi, [ebp+var_38]
		xor	eax, eax
		xor	esi, esi
		stosd
		mov	[ebp+var_4], esi
		mov	[ebp+var_C], esi
		stosd
		stosd
		stosd
		test	ecx, ecx
		jz	loc_A16F9F
		test	edx, edx
		jz	loc_A16F9F
		mov	eax, ds:_IoFileObjectType
		lea	edx, [ebp+arg_4]
		push	esi
		push	edx
		push	1
		push	eax
		push	esi
		push	ecx
		mov	[ebp+arg_4], esi
		call	_ObReferenceObjectByHandle@24 ;	ObReferenceObjectByHandle(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	loc_A174AE
		push	20534C53h
		push	248h
		xor	esi, esi
		push	1
		mov	[ebp+var_10], esi
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A17279

loc_A1726F:				; CODE XREF: sub_A16F7C+421j
					; sub_A16F7C+4DDj
		mov	esi, 0C0000017h
		jmp	loc_A174AE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17279:				; CODE XREF: sub_A16F7C+2F1j
		lea	eax, [ebp+var_10]
		push	eax		; int
		push	248h		; int
		push	edi		; void *
		push	esi		; size_t
		push	esi		; void *
		push	900F4h		; int
		push	[ebp+arg_4]	; int
		call	FsRtlKernelFsControlFile
		mov	esi, eax
		test	esi, esi
		js	short loc_A172EF
		cmp	[ebp+var_10], 40h
		jnb	short loc_A172A5

loc_A1729E:				; CODE XREF: sub_A16F7C+359j
		mov	esi, 0C000003Eh
		jmp	short loc_A172EF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A172A5:				; CODE XREF: sub_A16F7C+320j
		mov	eax, [edi]
		mov	[ebp+var_1C], eax
		mov	eax, [edi+4]
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_10]
		push	eax		; int
		push	248h		; int
		push	edi		; void *
		push	0		; size_t
		push	0		; void *
		push	900EBh		; int
		push	[ebp+arg_4]	; int
		call	FsRtlKernelFsControlFile
		mov	esi, eax
		test	esi, esi
		js	short loc_A172EF
		cmp	[ebp+var_10], 40h
		jb	short loc_A1729E
		mov	edx, [ebp+var_1C]
		mov	eax, [edi+18h]
		mov	ecx, [edi+1Ch]
		mov	[ebp+var_38], edx
		mov	edx, [ebp+var_14]
		mov	[ebp+var_34], edx
		mov	[ebp+var_30], eax
		mov	[ebp+var_2C], ecx

loc_A172EF:				; CODE XREF: sub_A16F7C+31Aj
					; sub_A16F7C+327j ...
		push	20534C53h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		test	esi, esi
		js	loc_A174AE
		mov	edx, [ebp+var_8]
		mov	eax, [ebp+var_38]
		cmp	eax, [edx]
		jnz	loc_A174A9
		mov	eax, [ebp+var_34]
		cmp	eax, [edx+4]
		jnz	loc_A174A9
		mov	eax, [ebp+var_30]
		cmp	eax, [edx+8]
		jnz	loc_A174A9
		mov	eax, [ebp+var_2C]
		cmp	eax, [edx+0Ch]
		jnz	loc_A174A9
		cmp	[ebp+var_20], 0
		push	18h
		pop	edi
		jnz	loc_A17431
		lea	eax, [ebp+var_C]
		xor	esi, esi
		push	eax
		push	esi
		push	ds:_IoFileObjectType
		push	edi
		push	esi
		push	200h
		push	[ebp+arg_4]
		call	ObOpenObjectByPointer
		test	eax, eax
		js	short loc_A17385
		push	[ebp+var_C]
		lea	eax, [ebp+var_C]
		push	1
		push	eax
		mov	eax, [ebp+var_24]
		add	eax, 0FFFFFFFEh
		cmp	eax, 1
		setnbe	al
		dec	al
		and	al, 6
		movzx	eax, al
		push	eax
		push	2
		call	_ZwSetCachedSigningLevel@20 ; ZwSetCachedSigningLevel(x,x,x,x,x)

loc_A17385:				; CODE XREF: sub_A16F7C+3E3j
		push	20534C53h
		push	248h
		push	1
		mov	[ebp+var_10], esi
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		test	edi, edi
		jz	loc_A1726F
		lea	eax, [ebp+var_10]
		push	eax		; int
		push	248h		; int
		push	edi		; void *
		push	esi		; size_t
		push	esi		; void *
		push	900F4h		; int
		push	[ebp+arg_4]	; int
		call	FsRtlKernelFsControlFile
		mov	esi, eax
		test	esi, esi
		js	short loc_A17419
		cmp	[ebp+var_10], 40h
		jnb	short loc_A173CF

loc_A173C8:				; CODE XREF: sub_A16F7C+483j
		mov	esi, 0C000003Eh
		jmp	short loc_A17419
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A173CF:				; CODE XREF: sub_A16F7C+44Aj
		mov	eax, [edi]
		mov	[ebp+var_24], eax
		mov	eax, [edi+4]
		mov	[ebp+var_20], eax
		lea	eax, [ebp+var_10]
		push	eax		; int
		push	248h		; int
		push	edi		; void *
		push	0		; size_t
		push	0		; void *
		push	900EBh		; int
		push	[ebp+arg_4]	; int
		call	FsRtlKernelFsControlFile
		mov	esi, eax
		test	esi, esi
		js	short loc_A17419
		cmp	[ebp+var_10], 40h
		jb	short loc_A173C8
		mov	edx, [ebp+var_24]
		mov	eax, [edi+18h]
		mov	ecx, [edi+1Ch]
		mov	[ebp+var_38], edx
		mov	edx, [ebp+var_20]
		mov	[ebp+var_34], edx
		mov	[ebp+var_30], eax
		mov	[ebp+var_2C], ecx

loc_A17419:				; CODE XREF: sub_A16F7C+444j
					; sub_A16F7C+451j ...
		push	20534C53h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		test	esi, esi
		js	loc_A174AE
		push	18h
		pop	edi
		jmp	short loc_A17444
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17431:				; CODE XREF: sub_A16F7C+3BFj
		or	[ebp+var_38], 0FFFFFFFFh
		or	[ebp+var_34], 0FFFFFFFFh
		or	[ebp+var_30], 0FFFFFFFFh
		mov	[ebp+var_2C], 7FFFFFFFh

loc_A17444:				; CODE XREF: sub_A16F7C+4B3j
		push	20534C53h
		push	3Ah
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		mov	[ebp+var_24], esi
		test	esi, esi
		jz	loc_A1726F
		push	3Ah		; size_t
		push	0		; int
		push	esi		; void *
		call	_memset
		mov	[esi+6], di
		add	esp, 0Ch
		mov	byte ptr [esi+5], 19h
		lea	edi, [esi+8]
		mov	esi, ds:off_A42124
		push	6
		pop	ecx
		rep movsd
		mov	ecx, [ebp+var_24]
		movsb
		lea	esi, [ebp+var_38]
		lea	edi, [ecx+22h]
		movsd
		movsd
		movsd
		movsd
		and	dword ptr [ecx+32h], 0
		and	dword ptr [ecx+36h], 0
		mov	edi, ecx
		push	3Ah
		push	ecx
		push	[ebp+arg_4]
		call	FsRtlSetKernelEaFile
		mov	esi, eax
		jmp	short loc_A174B1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A174A9:				; CODE XREF: sub_A16F7C+38Ej
					; sub_A16F7C+39Aj ...
		mov	esi, 0C000003Eh

loc_A174AE:				; CODE XREF: sub_A16F7C+2D1j
					; sub_A16F7C+2F8j ...
		mov	edi, [ebp+var_4]

loc_A174B1:				; CODE XREF: sub_A16F7C+52Bj
		cmp	[ebp+var_C], 0
		jz	short loc_A174BF
		push	[ebp+var_C]
		call	_ZwClose@4	; ZwClose(x)

loc_A174BF:				; CODE XREF: sub_A16F7C+539j
		cmp	[ebp+arg_4], 0
		jz	short loc_A174CD
		mov	ecx, [ebp+arg_4]
		call	ObfDereferenceObject

loc_A174CD:				; CODE XREF: sub_A16F7C+547j
		test	edi, edi
		jz	short loc_A174DC
		push	20534C53h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A174DC:				; CODE XREF: sub_A16F7C+553j
		test	esi, esi
		js	loc_A175D2
		mov	eax, [ebx+8]
		mov	[ebp+var_1C], eax
		test	eax, eax
		jnz	short loc_A1750A
		lea	ecx, [ebx+4]
		push	ecx
		mov	ecx, [ecx]
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A175D2
		inc	dword ptr [ebx]
		jmp	short loc_A1757E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1750A:				; CODE XREF: sub_A16F7C+570j
		mov	ecx, [ebx]
		mov	edi, eax
		and	[ebp+var_24], 0
		mov	[ebp+arg_4], edi
		mov	[ebp+var_20], ecx
		test	ecx, ecx
		jz	short loc_A1754D

loc_A1751C:				; CODE XREF: sub_A16F7C+5CCj
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A17569
		lea	eax, [ebp+arg_4]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A175D2
		mov	ecx, [ebp+var_24]
		mov	edi, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_24], ecx
		cmp	ecx, [ebp+var_20]
		jb	short loc_A1751C
		mov	eax, [ebp+var_1C]

loc_A1754D:				; CODE XREF: sub_A16F7C+59Ej
		lea	edx, [edi+4]
		cmp	edx, edi
		jb	short loc_A175CD
		mov	ecx, [ebx+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [edi+8]
		cmp	eax, ecx
		jbe	short loc_A17570

loc_A17562:				; CODE XREF: sub_A16F7C+15Bj
					; sub_A16F7C+1F5j ...
		mov	esi, 0C0000023h
		jmp	short loc_A175D2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17569:				; CODE XREF: sub_A16F7C+5A8j
		mov	esi, 0C0000095h
		jmp	short loc_A1757A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17570:				; CODE XREF: sub_A16F7C+5E4j
		mov	dword ptr [edi], 4
		and	[edx], esi
		inc	dword ptr [ebx]

loc_A1757A:				; CODE XREF: sub_A16F7C+5F2j
		test	esi, esi
		js	short loc_A175D2

loc_A1757E:				; CODE XREF: sub_A16F7C+58Cj
		mov	eax, [ebx+4]
		test	eax, eax
		jnz	short loc_A1758C

loc_A17585:				; CODE XREF: sub_A16F7C+BBj
		mov	esi, 0C000003Eh
		jmp	short loc_A175D2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1758C:				; CODE XREF: sub_A16F7C+607j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A175A6
		mov	esi, 0C0000017h
		jmp	short loc_A175D2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A175A6:				; CODE XREF: sub_A16F7C+621j
		mov	[ebx+8], edx
		and	dword ptr [ebx], 0
		lea	edi, [edx+4]
		cmp	edi, edx
		jb	short loc_A175CD
		mov	ecx, [ebx+4]
		lea	eax, [edx+8]
		add	ecx, edx
		xor	esi, esi
		cmp	eax, ecx
		ja	short loc_A17562
		mov	dword ptr [edx], 4
		and	[edi], esi
		inc	dword ptr [ebx]
		jmp	short loc_A175D2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A175CD:				; CODE XREF: sub_A16F7C+5D6j
					; sub_A16F7C+635j
		mov	esi, 0C0000095h

loc_A175D2:				; CODE XREF: sub_A16F7C+28j
					; sub_A16F7C+D1j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A16F7C	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A175DB	proc near		; CODE XREF: sub_785212+149Fp

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		and	[ebp+var_1C], 0
		xor	eax, eax
		and	[ebp+var_20], 0
		and	[ebp+var_18], 0
		and	[ebp+var_14], 0
		mov	[ebp+var_4], ecx
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_30]
		stosd
		stosd
		stosd
		stosd
		test	ecx, ecx
		jnz	short loc_A17610

loc_A17606:				; CODE XREF: sub_A175DB+39j
					; sub_A175DB+221j
		mov	ebx, 0C000000Dh
		jmp	loc_A17A2F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17610:				; CODE XREF: sub_A175DB+29j
		cmp	[ebp+arg_4], 0
		jz	short loc_A17606
		mov	eax, [ecx+8]
		xor	esi, esi
		and	[ebp+var_C], esi
		test	eax, eax
		jnz	short loc_A1762C

loc_A17622:				; CODE XREF: sub_A175DB+54j
		mov	ebx, 0C000000Dh
		jmp	loc_A176B0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1762C:				; CODE XREF: sub_A175DB+45j
		cmp	dword ptr [ecx], 3
		jbe	short loc_A17622
		xor	edi, edi

loc_A17633:				; CODE XREF: sub_A175DB+8Aj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17640
		xor	ebx, ebx
		jmp	short loc_A17648
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17640:				; CODE XREF: sub_A175DB+5Fj
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17648:				; CODE XREF: sub_A175DB+63j
		mov	[ebp+var_8], ecx
		test	ebx, ebx
		js	short loc_A1768C
		lea	eax, [ebp+var_8]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1768C
		mov	eax, [ebp+var_8]
		inc	edi
		cmp	edi, 3
		jb	short loc_A17633
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17674
		xor	ebx, ebx
		jmp	short loc_A1767C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17674:				; CODE XREF: sub_A175DB+93j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1767C:				; CODE XREF: sub_A175DB+97j
		test	ebx, ebx
		js	short loc_A1768C
		mov	esi, edx
		mov	eax, edx
		neg	esi
		sbb	esi, esi
		and	esi, ecx
		jmp	short loc_A1768F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1768C:				; CODE XREF: sub_A175DB+72j
					; sub_A175DB+81j ...
		mov	eax, [ebp+var_C]

loc_A1768F:				; CODE XREF: sub_A175DB+AFj
		test	ebx, ebx
		js	short loc_A176AD
		cmp	eax, 8
		jz	short loc_A176A2

loc_A17698:				; CODE XREF: sub_A175DB+20Fj
					; sub_A175DB+3A5j ...
		mov	ebx, 0C0000023h
		jmp	loc_A17A2F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A176A2:				; CODE XREF: sub_A175DB+BBj
		mov	eax, [esi]
		mov	[ebp+var_1C], eax
		mov	eax, [esi+4]
		mov	[ebp+var_20], eax

loc_A176AD:				; CODE XREF: sub_A175DB+B6j
		mov	ecx, [ebp+var_4]

loc_A176B0:				; CODE XREF: sub_A175DB+4Cj
		test	ebx, ebx
		js	loc_A17A2F
		mov	eax, [ecx+8]
		xor	esi, esi
		and	[ebp+var_8], esi
		test	eax, eax
		jnz	short loc_A176CB

loc_A176C4:				; CODE XREF: sub_A175DB+F3j
		mov	ebx, 0C000000Dh
		jmp	short loc_A17745
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A176CB:				; CODE XREF: sub_A175DB+E7j
		cmp	dword ptr [ecx], 4
		jbe	short loc_A176C4
		xor	edi, edi

loc_A176D2:				; CODE XREF: sub_A175DB+129j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A176DF
		xor	ebx, ebx
		jmp	short loc_A176E7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A176DF:				; CODE XREF: sub_A175DB+FEj
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A176E7:				; CODE XREF: sub_A175DB+102j
		mov	[ebp+var_C], ecx
		test	ebx, ebx
		js	short loc_A1772B
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1772B
		mov	eax, [ebp+var_C]
		inc	edi
		cmp	edi, 4
		jb	short loc_A176D2
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17713
		xor	ebx, ebx
		jmp	short loc_A1771B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17713:				; CODE XREF: sub_A175DB+132j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1771B:				; CODE XREF: sub_A175DB+136j
		test	ebx, ebx
		js	short loc_A1772B
		mov	esi, edx
		mov	eax, edx
		neg	esi
		sbb	esi, esi
		and	esi, ecx
		jmp	short loc_A1772E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1772B:				; CODE XREF: sub_A175DB+111j
					; sub_A175DB+120j ...
		mov	eax, [ebp+var_8]

loc_A1772E:				; CODE XREF: sub_A175DB+14Ej
		test	ebx, ebx
		js	short loc_A17742
		cmp	eax, 8
		jnz	short loc_A17772
		mov	eax, [esi]
		mov	[ebp+var_18], eax
		mov	eax, [esi+4]
		mov	[ebp+var_C], eax

loc_A17742:				; CODE XREF: sub_A175DB+155j
		mov	ecx, [ebp+var_4]

loc_A17745:				; CODE XREF: sub_A175DB+EEj
		test	ebx, ebx
		js	loc_A17A2F
		mov	eax, [ecx+8]
		xor	esi, esi
		and	[ebp+var_8], esi
		test	eax, eax
		jnz	short loc_A1777C

loc_A17759:				; CODE XREF: sub_A175DB+1A4j
		mov	ebx, 0C000000Dh

loc_A1775E:				; CODE XREF: sub_A175DB+206j
		mov	eax, [ebp+var_14]

loc_A17761:				; CODE XREF: sub_A175DB+217j
		test	ebx, ebx
		js	loc_A17A2F
		cmp	eax, 10h
		jz	loc_A177F7

loc_A17772:				; CODE XREF: sub_A175DB+15Aj
					; sub_A175DB+368j
		mov	ebx, 0C000003Eh
		jmp	loc_A17A2F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1777C:				; CODE XREF: sub_A175DB+17Cj
		cmp	dword ptr [ecx], 5
		jbe	short loc_A17759
		xor	edi, edi

loc_A17783:				; CODE XREF: sub_A175DB+1DAj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17790
		xor	ebx, ebx
		jmp	short loc_A17798
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17790:				; CODE XREF: sub_A175DB+1AFj
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17798:				; CODE XREF: sub_A175DB+1B3j
		mov	[ebp+var_C], ecx
		test	ebx, ebx
		js	short loc_A177DC
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A177DC
		mov	eax, [ebp+var_C]
		inc	edi
		cmp	edi, 5
		jb	short loc_A17783
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A177C4
		xor	ebx, ebx
		jmp	short loc_A177CC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A177C4:				; CODE XREF: sub_A175DB+1E3j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A177CC:				; CODE XREF: sub_A175DB+1E7j
		test	ebx, ebx
		js	short loc_A177DC
		mov	esi, edx
		mov	eax, edx
		neg	esi
		sbb	esi, esi
		and	esi, ecx
		jmp	short loc_A177DF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A177DC:				; CODE XREF: sub_A175DB+1C2j
					; sub_A175DB+1D1j ...
		mov	eax, [ebp+var_8]

loc_A177DF:				; CODE XREF: sub_A175DB+1FFj
		test	ebx, ebx
		js	loc_A1775E
		cmp	eax, 4
		jnz	loc_A17698
		mov	eax, [esi]
		jmp	loc_A17761
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A177F7:				; CODE XREF: sub_A175DB+191j
		mov	ecx, [ebp+var_18]
		test	ecx, ecx
		jz	loc_A17606
		mov	eax, ds:_IoFileObjectType
		lea	edx, [ebp+var_18]
		and	[ebp+var_18], 0
		push	0
		push	edx
		push	1
		push	eax
		push	0
		push	ecx
		call	_ObReferenceObjectByHandle@24 ;	ObReferenceObjectByHandle(x,x,x,x,x,x)
		mov	edi, [ebp+var_18]
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A178EE
		and	[ebp+var_4], 0
		mov	ebx, 248h
		push	20534C53h
		push	ebx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A1784F
		mov	ebx, 0C0000017h
		jmp	loc_A178EE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1784F:				; CODE XREF: sub_A175DB+268j
		lea	eax, [ebp+var_4]
		push	eax		; int
		push	ebx		; int
		push	esi		; void *
		push	0		; size_t
		push	0		; void *
		push	900F4h		; int
		push	edi		; int
		call	FsRtlKernelFsControlFile
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A178E3
		cmp	[ebp+var_4], 40h
		jnb	short loc_A17877

loc_A17870:				; CODE XREF: sub_A175DB+2D0j
					; sub_A175DB+2EEj
		mov	ebx, 0C000003Eh
		jmp	short loc_A178E3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17877:				; CODE XREF: sub_A175DB+293j
		cmp	byte ptr [edi+27h], 0
		mov	eax, [esi]
		mov	[ebp+var_18], eax
		mov	eax, [esi+4]
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_4]
		push	eax		; int
		push	248h		; int
		push	esi		; void *
		push	0		; size_t
		push	0		; void *
		jz	short loc_A178B4
		push	900EFh		; int
		push	edi		; int
		call	FsRtlKernelFsControlFile
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A178E3
		cmp	[ebp+var_4], 8
		jb	short loc_A17870
		mov	eax, [esi]
		mov	ecx, [esi+4]
		jmp	short loc_A178D1 ; void	*
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A178B4:				; CODE XREF: sub_A175DB+2B9j
		push	900EBh		; int
		push	edi		; int
		call	FsRtlKernelFsControlFile
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A178E3
		cmp	[ebp+var_4], 40h
		jb	short loc_A17870
		mov	eax, [esi+18h]
		mov	ecx, [esi+1Ch]

loc_A178D1:				; CODE XREF: sub_A175DB+2D7j
		mov	edx, [ebp+var_18]
		mov	[ebp+var_30], edx
		mov	edx, [ebp+var_14]
		mov	[ebp+var_2C], edx
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], ecx

loc_A178E3:				; CODE XREF: sub_A175DB+28Dj
					; sub_A175DB+29Aj ...
		push	20534C53h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A178EE:				; CODE XREF: sub_A175DB+248j
					; sub_A175DB+26Fj
		test	edi, edi
		jz	short loc_A178F9
		mov	ecx, edi
		call	ObfDereferenceObject

loc_A178F9:				; CODE XREF: sub_A175DB+315j
		test	ebx, ebx
		js	loc_A17A2F
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		xor	ecx, ecx
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A17A2F
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		push	14h
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A17A2F
		mov	ebx, [ebp+arg_4]
		mov	eax, [ebp+var_4]
		lea	edi, [ebx+4]
		mov	[edi], eax
		test	eax, eax
		jz	loc_A17772
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A17966
		mov	ebx, 0C0000017h
		jmp	loc_A17A2F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17966:				; CODE XREF: sub_A175DB+37Fj
		mov	[ebx+8], edx
		and	dword ptr [ebx], 0
		lea	esi, [edx+4]
		cmp	esi, edx
		jb	loc_A17A2A
		mov	ecx, [edi]
		lea	eax, [edx+0Ch]
		add	ecx, edx
		cmp	eax, ecx
		ja	loc_A17698
		mov	eax, [ebp+var_1C]
		mov	dword ptr [edx], 8
		mov	[esi], eax
		mov	eax, [ebp+var_20]
		mov	[esi+4], eax
		inc	dword ptr [ebx]
		mov	ecx, [ebx]
		mov	[ebp+var_1C], ecx
		mov	eax, [ebx+8]
		mov	[ebp+var_18], eax
		test	eax, eax
		jnz	short loc_A179C2
		mov	ecx, [edi]
		push	edi
		push	14h
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A17A2F
		mov	eax, [ebp+arg_4]
		inc	dword ptr [eax]
		xor	ebx, ebx
		jmp	short loc_A17A2F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A179C2:				; CODE XREF: sub_A175DB+3CBj
		and	[ebp+var_20], 0
		mov	esi, eax
		mov	[ebp+var_14], esi
		test	ecx, ecx
		jz	short loc_A179FC

loc_A179CF:				; CODE XREF: sub_A175DB+41Cj
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A17A2A
		lea	eax, [ebp+var_14]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A17A2F
		mov	ecx, [ebp+var_20]
		mov	esi, [ebp+var_14]
		inc	ecx
		mov	[ebp+var_20], ecx
		cmp	ecx, [ebp+var_1C]
		jb	short loc_A179CF
		mov	eax, [ebp+var_18]

loc_A179FC:				; CODE XREF: sub_A175DB+3F2j
		lea	edx, [esi+4]
		cmp	edx, esi
		jb	short loc_A17A2A
		mov	ecx, [edi]
		xor	ebx, ebx
		add	ecx, eax
		lea	eax, [esi+14h]
		cmp	eax, ecx
		ja	loc_A17698
		mov	eax, [ebp+arg_4]
		mov	edi, edx
		mov	dword ptr [esi], 10h
		lea	esi, [ebp+var_30]
		movsd
		movsd
		movsd
		movsd
		inc	dword ptr [eax]
		jmp	short loc_A17A2F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17A2A:				; CODE XREF: sub_A175DB+396j
					; sub_A175DB+3FCj ...
		mov	ebx, 0C0000095h

loc_A17A2F:				; CODE XREF: sub_A175DB+30j
					; sub_A175DB+C2j ...
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	8
sub_A175DB	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A17A38	proc near		; CODE XREF: sub_785212+1A5Cp

var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 54h
		mov	[ebp+var_50], edx
		mov	edx, ecx
		push	ebx
		xor	ebx, ebx
		mov	[ebp+var_4], edx
		push	esi
		mov	eax, [edx+8]
		mov	[ebp+var_C], ebx
		mov	[ebp+var_40], ebx
		mov	[ebp+var_44], ebx
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_38], ebx
		mov	[ebp+var_34], ebx
		mov	[ebp+var_30], ebx
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_10], ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_48], ebx
		push	edi
		mov	edi, ebx
		test	eax, eax
		jnz	short loc_A17A84

loc_A17A7A:				; CODE XREF: sub_A17A38+4Fj
		mov	esi, 0C000000Dh
		jmp	loc_A17B07
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17A84:				; CODE XREF: sub_A17A38+40j
		cmp	dword ptr [edx], 3
		jbe	short loc_A17A7A

loc_A17A89:				; CODE XREF: sub_A17A38+83j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17A96
		xor	esi, esi
		jmp	short loc_A17A9E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17A96:				; CODE XREF: sub_A17A38+58j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17A9E:				; CODE XREF: sub_A17A38+5Cj
		mov	[ebp+var_14], ecx
		test	esi, esi
		js	short loc_A17AE2
		lea	eax, [ebp+var_14]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A17AE2
		mov	eax, [ebp+var_14]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A17A89
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17ACA
		xor	esi, esi
		jmp	short loc_A17AD2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17ACA:				; CODE XREF: sub_A17A38+8Cj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17AD2:				; CODE XREF: sub_A17A38+90j
		test	esi, esi
		js	short loc_A17AE2
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A17AE4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17AE2:				; CODE XREF: sub_A17A38+6Bj
					; sub_A17A38+7Aj ...
		mov	eax, edi

loc_A17AE4:				; CODE XREF: sub_A17A38+A8j
		test	esi, esi
		js	short loc_A17B02
		cmp	eax, 8
		jz	short loc_A17AF7

loc_A17AED:				; CODE XREF: sub_A17A38+152j
		mov	esi, 0C0000023h
		jmp	loc_A18359
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17AF7:				; CODE XREF: sub_A17A38+B3j
		mov	eax, [edi]
		mov	[ebp+var_40], eax
		mov	eax, [edi+4]
		mov	[ebp+var_44], eax

loc_A17B02:				; CODE XREF: sub_A17A38+AEj
		mov	edx, [ebp+var_4]
		xor	ebx, ebx

loc_A17B07:				; CODE XREF: sub_A17A38+47j
		test	esi, esi
		js	loc_A18359
		mov	eax, [edx+8]
		mov	edi, ebx
		mov	[ebp+var_14], ebx
		test	eax, eax
		jnz	short loc_A17B22

loc_A17B1B:				; CODE XREF: sub_A17A38+EDj
		mov	esi, 0C000000Dh
		jmp	short loc_A17B9A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17B22:				; CODE XREF: sub_A17A38+E1j
		cmp	dword ptr [edx], 4
		jbe	short loc_A17B1B

loc_A17B27:				; CODE XREF: sub_A17A38+121j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17B34
		xor	esi, esi
		jmp	short loc_A17B3C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17B34:				; CODE XREF: sub_A17A38+F6j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17B3C:				; CODE XREF: sub_A17A38+FAj
		mov	[ebp+var_18], ecx
		test	esi, esi
		js	short loc_A17B80
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A17B80
		mov	eax, [ebp+var_18]
		inc	ebx
		cmp	ebx, 4
		jb	short loc_A17B27
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17B68
		xor	esi, esi
		jmp	short loc_A17B70
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17B68:				; CODE XREF: sub_A17A38+12Aj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17B70:				; CODE XREF: sub_A17A38+12Ej
		test	esi, esi
		js	short loc_A17B80
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A17B83
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17B80:				; CODE XREF: sub_A17A38+109j
					; sub_A17A38+118j ...
		mov	eax, [ebp+var_14]

loc_A17B83:				; CODE XREF: sub_A17A38+146j
		test	esi, esi
		js	short loc_A17B95
		cmp	eax, 4
		jnz	loc_A17AED
		mov	eax, [edi]
		mov	[ebp+var_38], eax

loc_A17B95:				; CODE XREF: sub_A17A38+14Dj
		mov	edx, [ebp+var_4]
		xor	ebx, ebx

loc_A17B9A:				; CODE XREF: sub_A17A38+E8j
		test	esi, esi
		js	loc_A18359
		and	[ebp+var_24], 0
		mov	ecx, ebx
		mov	eax, [edx+8]
		mov	edi, ebx
		mov	[ebp+var_14], ebx
		mov	[ebp+var_4C], ecx
		test	eax, eax
		jnz	short loc_A17BC1

loc_A17BB7:				; CODE XREF: sub_A17A38+18Cj
		mov	esi, 0C000000Dh
		jmp	loc_A17C95
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17BC1:				; CODE XREF: sub_A17A38+17Dj
		cmp	dword ptr [edx], 5
		jbe	short loc_A17BB7
		and	[ebp+var_20], 0

loc_A17BCA:				; CODE XREF: sub_A17A38+1D2j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17BD7
		xor	esi, esi
		jmp	short loc_A17BDF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17BD7:				; CODE XREF: sub_A17A38+199j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17BDF:				; CODE XREF: sub_A17A38+19Dj
		mov	[ebp+var_18], ecx
		test	esi, esi
		js	loc_A17C92
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A17C92
		mov	edx, [ebp+var_20]
		mov	eax, [ebp+var_18]
		inc	edx
		mov	[ebp+var_20], edx
		cmp	edx, 5
		jb	short loc_A17BCA
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17C19
		xor	esi, esi
		jmp	short loc_A17C21
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17C19:				; CODE XREF: sub_A17A38+1DBj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17C21:				; CODE XREF: sub_A17A38+1DFj
		test	esi, esi
		js	short loc_A17C92
		mov	edi, edx
		mov	ebx, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		test	esi, esi
		js	short loc_A17C92
		test	ebx, ebx
		jnz	short loc_A17C5C

loc_A17C37:				; CODE XREF: sub_A17A38+22Aj
					; sub_A17A38+237j ...
		mov	esi, 0C000003Eh

loc_A17C3C:				; CODE XREF: sub_A17A38+28Bj
		test	esi, esi
		js	loc_A18359

loc_A17C44:				; CODE XREF: sub_A17A38+29Ej
		mov	ebx, [ebp+var_4]
		mov	eax, [ebx+8]
		test	eax, eax
		jnz	loc_A17CDB

loc_A17C52:				; CODE XREF: sub_A17A38+2A6j
					; sub_A17A38+322j ...
		mov	esi, 0C000000Dh
		jmp	loc_A18335
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17C5C:				; CODE XREF: sub_A17A38+1FDj
		test	ebx, 1
		jnz	short loc_A17C37
		mov	eax, ebx
		xor	ecx, ecx
		shr	eax, 1
		cmp	cx, [edi+eax*2-2]
		jnz	short loc_A17C37
		lea	eax, [ebp+var_24]
		mov	edx, ebx
		push	eax
		mov	ecx, edi
		call	_StringCbLengthW@12 ; StringCbLengthW(x,x,x)
		test	eax, eax
		js	short loc_A17C37
		mov	ecx, [ebp+var_24]
		lea	eax, [ecx+2]
		cmp	eax, ebx
		jnz	short loc_A17C37
		mov	ebx, edi
		shr	ecx, 1
		jmp	short loc_A17C98
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17C92:				; CODE XREF: sub_A17A38+1ACj
					; sub_A17A38+1BFj ...
		mov	ecx, [ebp+var_4C]

loc_A17C95:				; CODE XREF: sub_A17A38+184j
		mov	ebx, [ebp+var_14]

loc_A17C98:				; CODE XREF: sub_A17A38+258j
		test	esi, esi
		js	loc_A18359
		lea	edi, ds:2[ecx*2]
		test	edi, edi
		jz	short loc_A17C37
		push	20534C53h
		push	edi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A17CC8
		mov	esi, 0C0000017h
		jmp	loc_A17C3C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17CC8:				; CODE XREF: sub_A17A38+284j
		push	edi		; size_t
		push	ebx		; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	[ebp+var_1C], esi
		jmp	loc_A17C44
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17CDB:				; CODE XREF: sub_A17A38+214j
		cmp	dword ptr [ebx], 6
		jbe	loc_A17C52
		xor	edi, edi

loc_A17CE6:				; CODE XREF: sub_A17A38+2E8j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17CF3
		xor	esi, esi
		jmp	short loc_A17CFB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17CF3:				; CODE XREF: sub_A17A38+2B5j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17CFB:				; CODE XREF: sub_A17A38+2B9j
		mov	[ebp+var_18], ecx
		test	esi, esi
		js	loc_A18335
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		mov	eax, [ebp+var_18]
		inc	edi
		cmp	edi, 6
		jb	short loc_A17CE6
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17D2F
		xor	esi, esi
		jmp	short loc_A17D37
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17D2F:				; CODE XREF: sub_A17A38+2F1j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17D37:				; CODE XREF: sub_A17A38+2F5j
		test	esi, esi
		js	loc_A18335
		mov	eax, edx
		mov	[ebp+var_30], edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_34], eax
		test	esi, esi
		js	loc_A18335
		mov	eax, [ebx+8]
		test	eax, eax
		jz	loc_A17C52
		cmp	dword ptr [ebx], 7
		jbe	loc_A17C52
		xor	edi, edi

loc_A17D6B:				; CODE XREF: sub_A17A38+36Dj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17D78
		xor	esi, esi
		jmp	short loc_A17D80
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17D78:				; CODE XREF: sub_A17A38+33Aj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17D80:				; CODE XREF: sub_A17A38+33Ej
		mov	[ebp+var_18], ecx
		test	esi, esi
		js	loc_A18335
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		mov	eax, [ebp+var_18]
		inc	edi
		cmp	edi, 7
		jb	short loc_A17D6B
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17DB4
		xor	esi, esi
		jmp	short loc_A17DBC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17DB4:				; CODE XREF: sub_A17A38+376j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17DBC:				; CODE XREF: sub_A17A38+37Aj
		test	esi, esi
		js	loc_A18335
		mov	eax, edx
		mov	[ebp+var_28], edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_2C], eax
		test	esi, esi
		js	loc_A18335
		mov	eax, [ebx+8]
		xor	edi, edi
		and	[ebp+var_14], edi
		test	eax, eax
		jnz	short loc_A17DF2

loc_A17DE6:				; CODE XREF: sub_A17A38+3BDj
		mov	esi, 0C000000Dh
		mov	ebx, edi
		jmp	loc_A17E72
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17DF2:				; CODE XREF: sub_A17A38+3ACj
		cmp	dword ptr [ebx], 8
		jbe	short loc_A17DE6
		xor	ebx, ebx

loc_A17DF9:				; CODE XREF: sub_A17A38+3F3j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17E06
		xor	esi, esi
		jmp	short loc_A17E0E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17E06:				; CODE XREF: sub_A17A38+3C8j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17E0E:				; CODE XREF: sub_A17A38+3CCj
		mov	[ebp+var_18], ecx
		test	esi, esi
		js	short loc_A17E52
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A17E52
		mov	eax, [ebp+var_18]
		inc	ebx
		cmp	ebx, 8
		jb	short loc_A17DF9
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17E3A
		xor	esi, esi
		jmp	short loc_A17E42
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17E3A:				; CODE XREF: sub_A17A38+3FCj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17E42:				; CODE XREF: sub_A17A38+400j
		test	esi, esi
		js	short loc_A17E52
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A17E55
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17E52:				; CODE XREF: sub_A17A38+3DBj
					; sub_A17A38+3EAj ...
		mov	eax, [ebp+var_14]

loc_A17E55:				; CODE XREF: sub_A17A38+418j
		test	esi, esi
		js	short loc_A17E6F
		cmp	eax, 4
		jz	short loc_A17E68

loc_A17E5E:				; CODE XREF: sub_A17A38+6BCj
					; sub_A17A38+75Dj ...
		mov	esi, 0C0000023h
		jmp	loc_A18335
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17E68:				; CODE XREF: sub_A17A38+424j
		mov	ebx, [edi]
		mov	[ebp+var_8], ebx
		jmp	short loc_A17E72
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17E6F:				; CODE XREF: sub_A17A38+41Fj
		mov	ebx, [ebp+var_8]

loc_A17E72:				; CODE XREF: sub_A17A38+3B5j
					; sub_A17A38+435j
		test	esi, esi
		js	loc_A18335
		xor	esi, esi
		test	ebx, ebx
		jz	short loc_A17EAE
		push	20534C53h
		push	ebx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	ecx, eax
		mov	[ebp+var_10], ecx
		test	ecx, ecx
		jnz	short loc_A17EA0
		mov	esi, 0C0000017h
		jmp	loc_A18335
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17EA0:				; CODE XREF: sub_A17A38+45Cj
		push	ebx		; size_t
		push	0		; int
		push	ecx		; void *
		call	_memset
		add	esp, 0Ch
		jmp	short loc_A17EAF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17EAE:				; CODE XREF: sub_A17A38+446j
		inc	esi

loc_A17EAF:				; CODE XREF: sub_A17A38+474j
		mov	eax, ds:dword_A93E88
		test	eax, eax
		jz	short loc_A17EDD
		neg	esi
		lea	ecx, [ebp+var_48]
		push	ecx
		push	ebx
		sbb	esi, esi
		not	esi
		and	esi, [ebp+var_10]
		push	esi
		push	[ebp+var_28]
		push	[ebp+var_2C]
		push	[ebp+var_30]
		push	[ebp+var_34]
		push	[ebp+var_1C]
		push	[ebp+var_38]
		call	eax
		jmp	short loc_A17EE2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17EDD:				; CODE XREF: sub_A17A38+47Ej
		mov	eax, 0C00000BBh

loc_A17EE2:				; CODE XREF: sub_A17A38+4A3j
		and	[ebp+var_4], 0
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_4]
		xor	ecx, ecx
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A17F4E
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A17F4E
		lea	edx, [ebx+4]
		cmp	edx, 4
		jb	short loc_A17F49
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A17F4E
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A17F4E
		mov	eax, [ebp+var_4]
		mov	[ebp+var_C], eax
		jmp	short loc_A17F51
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17F49:				; CODE XREF: sub_A17A38+4E0j
		mov	esi, 0C0000095h

loc_A17F4E:				; CODE XREF: sub_A17A38+4C3j
					; sub_A17A38+4D8j ...
		mov	eax, [ebp+var_C]

loc_A17F51:				; CODE XREF: sub_A17A38+50Fj
		test	esi, esi
		js	loc_A18335
		xor	edi, edi
		mov	[ebp+var_3C], 8
		lea	ecx, [ebp+var_3C]
		mov	edx, eax
		push	ecx
		push	8
		pop	ecx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		mov	eax, [ebp+var_3C]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A17F8E
		mov	esi, 0C0000095h
		jmp	short loc_A17F9B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17F8E:				; CODE XREF: sub_A17A38+54Dj
		lea	edi, [ecx+8]
		cmp	edi, ecx
		jb	loc_A1801A
		xor	esi, esi

loc_A17F9B:				; CODE XREF: sub_A17A38+554j
		test	esi, esi
		js	loc_A18335
		mov	ebx, [ebp+var_50]
		mov	edx, edi
		push	4
		pop	ecx
		mov	[ebp+var_4], ecx
		mov	eax, [ebx+10h]
		mov	ebx, [ebx+8]
		mov	[ebp+var_50], eax
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A17FD8
		xor	esi, esi
		jmp	short loc_A17FE0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A17FD8:				; CODE XREF: sub_A17A38+59Aj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A17FE0:				; CODE XREF: sub_A17A38+59Ej
		mov	[ebp+var_4], ecx
		test	esi, esi
		js	loc_A18335
		lea	eax, [ebp+var_4]
		mov	edx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1801A
		mov	edx, [ebp+var_50]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		jmp	short loc_A1801F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1801A:				; CODE XREF: sub_A17A38+55Bj
					; sub_A17A38+5D0j
		mov	esi, 0C0000095h

loc_A1801F:				; CODE XREF: sub_A17A38+5E0j
		test	esi, esi
		js	loc_A18335
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jz	loc_A17C52
		mov	eax, [ebp+var_C]
		lea	ebx, [edi+4]
		xor	esi, esi
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A18047
		mov	esi, 0C000003Eh
		jmp	short loc_A18064
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18047:				; CODE XREF: sub_A17A38+606j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		test	eax, eax
		jnz	short loc_A1805F
		mov	esi, 0C0000017h
		jmp	short loc_A18064
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1805F:				; CODE XREF: sub_A17A38+61Ej
		mov	[edi+8], eax
		and	[edi], esi

loc_A18064:				; CODE XREF: sub_A17A38+60Dj
					; sub_A17A38+625j
		test	esi, esi
		js	loc_A18335
		mov	eax, [edi+8]
		or	[ebp+var_14], 10000000h
		mov	[ebp+var_4C], eax
		test	eax, eax
		jnz	short loc_A18096
		mov	ecx, [ebx]
		push	ebx
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		inc	dword ptr [edi]
		jmp	short loc_A18110
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18096:				; CODE XREF: sub_A17A38+643j
		mov	ecx, [edi]
		mov	edx, eax
		and	[ebp+var_38], 0
		mov	[ebp+arg_4], edx
		mov	[ebp+var_50], ecx
		test	ecx, ecx
		jz	short loc_A180DE

loc_A180A8:				; CODE XREF: sub_A17A38+6A1j
		mov	edx, [edx]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A18136
		mov	ecx, [ebp+arg_4]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		mov	ecx, [ebp+var_38]
		mov	edx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_38], ecx
		cmp	ecx, [ebp+var_50]
		jb	short loc_A180A8
		mov	eax, [ebp+var_4C]

loc_A180DE:				; CODE XREF: sub_A17A38+66Ej
		lea	ecx, [edx+4]
		cmp	ecx, edx
		jb	loc_A18330
		mov	ecx, [ebx]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [edx+8]
		cmp	eax, ecx
		ja	loc_A17E5E
		mov	eax, [ebp+var_14]
		mov	dword ptr [edx], 4
		mov	[edx+4], eax
		inc	dword ptr [edi]

loc_A18108:				; CODE XREF: sub_A17A38+703j
		test	esi, esi
		js	loc_A18335

loc_A18110:				; CODE XREF: sub_A17A38+65Cj
		mov	eax, [edi+8]
		mov	[ebp+var_4C], eax
		test	eax, eax
		jnz	short loc_A1813D
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		inc	dword ptr [edi]
		jmp	loc_A181B9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18136:				; CODE XREF: sub_A17A38+678j
		mov	esi, 0C0000095h
		jmp	short loc_A18108
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1813D:				; CODE XREF: sub_A17A38+6E0j
		and	[ebp+var_38], 0
		mov	ebx, eax
		mov	eax, [edi]
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_50], eax
		test	eax, eax
		jz	short loc_A1817D

loc_A1814F:				; CODE XREF: sub_A17A38+743j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A18208
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A181AE
		mov	ecx, [ebp+var_38]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_38], ecx
		cmp	ecx, [ebp+var_50]
		jb	short loc_A1814F

loc_A1817D:				; CODE XREF: sub_A17A38+715j
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A18330
		mov	ecx, [edi+4]
		lea	eax, [ebx+0Ch]
		add	ecx, [ebp+var_4C]
		xor	esi, esi
		cmp	eax, ecx
		ja	loc_A17E5E
		mov	eax, [ebp+var_40]
		mov	dword ptr [ebx], 8
		mov	[edx], eax
		mov	eax, [ebp+var_44]
		mov	[edx+4], eax
		inc	dword ptr [edi]

loc_A181AE:				; CODE XREF: sub_A17A38+734j
					; sub_A17A38+7D5j
		lea	ebx, [edi+4]
		test	esi, esi
		js	loc_A18335

loc_A181B9:				; CODE XREF: sub_A17A38+6F9j
		cmp	[ebp+var_10], 0
		mov	eax, [ebp+var_8]
		jnz	short loc_A1820F
		test	eax, eax
		jz	short loc_A18213

loc_A181C6:				; CODE XREF: sub_A17A38+7D9j
		mov	esi, 0C000000Dh

loc_A181CB:				; CODE XREF: sub_A17A38+808j
					; sub_A17A38+88Bj
		test	esi, esi
		js	loc_A18335
		lea	ebx, [edi+4]

loc_A181D6:				; CODE XREF: sub_A17A38+801j
		mov	edx, [edi+8]
		mov	eax, [ebp+var_48]
		mov	[ebp+var_40], eax
		mov	[ebp+var_4C], edx
		test	edx, edx
		jnz	loc_A182C8
		mov	ecx, [ebx]
		push	ebx
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		inc	dword ptr [edi]
		xor	esi, esi
		jmp	loc_A18335
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18208:				; CODE XREF: sub_A17A38+71Fj
		mov	esi, 0C0000095h
		jmp	short loc_A181AE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1820F:				; CODE XREF: sub_A17A38+788j
		test	eax, eax
		jz	short loc_A181C6

loc_A18213:				; CODE XREF: sub_A17A38+78Cj
		mov	edx, [edi+8]
		mov	[ebp+var_4C], edx
		test	edx, edx
		jnz	short loc_A18242
		lea	edx, [eax+4]
		cmp	edx, 4
		jb	short loc_A1823B
		mov	ecx, [ebx]
		push	ebx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		inc	dword ptr [edi]
		jmp	short loc_A181D6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1823B:				; CODE XREF: sub_A17A38+7EBj
					; sub_A17A38+824j
		mov	esi, 0C0000095h
		jmp	short loc_A181CB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18242:				; CODE XREF: sub_A17A38+7E3j
		mov	eax, [edi]
		mov	ebx, edx
		and	[ebp+var_44], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_50], eax
		test	eax, eax
		jz	short loc_A18285

loc_A18254:				; CODE XREF: sub_A17A38+848j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A1823B
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18335
		mov	ecx, [ebp+var_44]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_44], ecx
		cmp	ecx, [ebp+var_50]
		jb	short loc_A18254
		mov	edx, [ebp+var_4C]

loc_A18285:				; CODE XREF: sub_A17A38+81Aj
		lea	eax, [ebx+4]
		cmp	eax, ebx
		jb	loc_A18330
		mov	ecx, [ebp+var_8]
		xor	esi, esi
		mov	eax, [edi+4]
		add	ecx, 4
		add	ecx, ebx
		add	eax, edx
		cmp	ecx, eax
		ja	loc_A17E5E
		mov	ecx, [ebp+var_10]
		mov	eax, [ebp+var_8]
		mov	[ebx], eax
		test	ecx, ecx
		jz	short loc_A182C1
		push	eax		; size_t
		push	ecx		; void *
		lea	eax, [ebx+4]
		push	eax		; void *
		call	_memcpy
		add	esp, 0Ch

loc_A182C1:				; CODE XREF: sub_A17A38+879j
		inc	dword ptr [edi]
		jmp	loc_A181CB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A182C8:				; CODE XREF: sub_A17A38+7ACj
		mov	eax, [edi]
		mov	ebx, edx
		and	[ebp+var_44], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_50], eax
		test	eax, eax
		jz	short loc_A18307

loc_A182DA:				; CODE XREF: sub_A17A38+8CAj
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A18330
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A18335
		mov	ecx, [ebp+var_44]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_44], ecx
		cmp	ecx, [ebp+var_50]
		jb	short loc_A182DA
		mov	edx, [ebp+var_4C]

loc_A18307:				; CODE XREF: sub_A17A38+8A0j
		lea	eax, [ebx+4]
		cmp	eax, ebx
		jb	short loc_A18330
		mov	ecx, [edi+4]
		lea	eax, [ebx+8]
		add	ecx, edx
		xor	esi, esi
		cmp	eax, ecx
		ja	loc_A17E5E
		mov	eax, [ebp+var_40]
		mov	dword ptr [ebx], 4
		mov	[ebx+4], eax
		inc	dword ptr [edi]
		jmp	short loc_A18335
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18330:				; CODE XREF: sub_A17A38+6ABj
					; sub_A17A38+74Aj ...
		mov	esi, 0C0000095h

loc_A18335:				; CODE XREF: sub_A17A38+21Fj
					; sub_A17A38+2C8j ...
		mov	eax, [ebp+var_1C]
		test	eax, eax
		jz	short loc_A18347
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A18347:				; CODE XREF: sub_A17A38+902j
		mov	eax, [ebp+var_10]
		test	eax, eax
		jz	short loc_A18359
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A18359:				; CODE XREF: sub_A17A38+BAj
					; sub_A17A38+D1j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A17A38	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A18362	proc near		; CODE XREF: sub_785212+19CDp

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		and	[ebp+var_8], 0
		and	[ebp+var_1C], 0
		and	[ebp+var_20], 0
		and	[ebp+var_10], 0
		mov	eax, [ecx+8]
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		mov	[ebp+var_24], edx
		and	[ebp+var_4], edi
		mov	[ebp+var_14], ecx
		test	eax, eax
		jnz	short loc_A18399

loc_A1838F:				; CODE XREF: sub_A18362+3Aj
		mov	esi, 0C000000Dh
		jmp	loc_A1841D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18399:				; CODE XREF: sub_A18362+2Bj
		cmp	dword ptr [ecx], 3
		jbe	short loc_A1838F
		xor	ebx, ebx

loc_A183A0:				; CODE XREF: sub_A18362+70j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A183AD
		xor	esi, esi
		jmp	short loc_A183B5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A183AD:				; CODE XREF: sub_A18362+45j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A183B5:				; CODE XREF: sub_A18362+49j
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	short loc_A183F9
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A183F9
		mov	eax, [ebp+var_C]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A183A0
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A183E1
		xor	esi, esi
		jmp	short loc_A183E9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A183E1:				; CODE XREF: sub_A18362+79j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A183E9:				; CODE XREF: sub_A18362+7Dj
		test	esi, esi
		js	short loc_A183F9
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A183FC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A183F9:				; CODE XREF: sub_A18362+58j
					; sub_A18362+67j ...
		mov	eax, [ebp+var_4]

loc_A183FC:				; CODE XREF: sub_A18362+95j
		test	esi, esi
		js	short loc_A1841A
		cmp	eax, 8
		jz	short loc_A1840F

loc_A18405:				; CODE XREF: sub_A18362+164j
		mov	esi, 0C0000023h
		jmp	loc_A18938
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1840F:				; CODE XREF: sub_A18362+A1j
		mov	eax, [edi]
		mov	[ebp+var_1C], eax
		mov	eax, [edi+4]
		mov	[ebp+var_20], eax

loc_A1841A:				; CODE XREF: sub_A18362+9Cj
		mov	ecx, [ebp+var_14]

loc_A1841D:				; CODE XREF: sub_A18362+32j
		test	esi, esi
		js	loc_A18938
		mov	eax, [ecx+8]
		xor	edi, edi
		and	[ebp+var_4], edi
		test	eax, eax
		jnz	short loc_A18458

loc_A18431:				; CODE XREF: sub_A18362+F9j
		mov	esi, 0C000000Dh

loc_A18436:				; CODE XREF: sub_A18362+15Bj
		mov	eax, [ebp+var_10]

loc_A18439:				; CODE XREF: sub_A18362+16Cj
		test	esi, esi
		js	loc_A18938
		mov	ecx, 1008h
		cmp	eax, ecx
		jz	loc_A184D3
		mov	esi, 0C000003Eh
		jmp	loc_A18938
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18458:				; CODE XREF: sub_A18362+CDj
		cmp	dword ptr [ecx], 4
		jbe	short loc_A18431
		xor	ebx, ebx

loc_A1845F:				; CODE XREF: sub_A18362+12Fj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1846C
		xor	esi, esi
		jmp	short loc_A18474
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1846C:				; CODE XREF: sub_A18362+104j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18474:				; CODE XREF: sub_A18362+108j
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	short loc_A184B8
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A184B8
		mov	eax, [ebp+var_C]
		inc	ebx
		cmp	ebx, 4
		jb	short loc_A1845F
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A184A0
		xor	esi, esi
		jmp	short loc_A184A8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A184A0:				; CODE XREF: sub_A18362+138j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A184A8:				; CODE XREF: sub_A18362+13Cj
		test	esi, esi
		js	short loc_A184B8
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A184BB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A184B8:				; CODE XREF: sub_A18362+117j
					; sub_A18362+126j ...
		mov	eax, [ebp+var_4]

loc_A184BB:				; CODE XREF: sub_A18362+154j
		test	esi, esi
		js	loc_A18436
		cmp	eax, 4
		jnz	loc_A18405
		mov	eax, [edi]
		jmp	loc_A18439
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A184D3:				; CODE XREF: sub_A18362+E6j
		push	20534C53h
		push	ecx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	ecx, eax
		mov	[ebp+var_10], ecx
		test	ecx, ecx
		jnz	short loc_A184F3
		mov	esi, 0C0000017h
		jmp	loc_A18938
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A184F3:				; CODE XREF: sub_A18362+185j
		mov	eax, ds:dword_A93E5C
		test	eax, eax
		jz	short loc_A18501
		push	ecx
		call	eax
		jmp	short loc_A18506
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18501:				; CODE XREF: sub_A18362+198j
		mov	eax, 0C00000BBh

loc_A18506:				; CODE XREF: sub_A18362+19Dj
		mov	[ebp+var_C], eax
		mov	esi, eax
		test	eax, eax
		js	loc_A1892B
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		xor	ecx, ecx
		push	eax
		push	8
		pop	ebx
		mov	edx, ebx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A18575
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A18575
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		mov	edx, 100Ch
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A18575
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_4]
		push	eax
		mov	edx, ebx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A18575
		mov	eax, [ebp+var_4]
		mov	[ebp+var_8], eax
		jmp	short loc_A18578
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18575:				; CODE XREF: sub_A18362+1C9j
					; sub_A18362+1DEj ...
		mov	eax, [ebp+var_8]

loc_A18578:				; CODE XREF: sub_A18362+211j
		test	esi, esi
		js	loc_A1892B
		xor	edi, edi
		mov	[ebp+var_18], ebx
		lea	ecx, [ebp+var_18]
		mov	edx, eax
		push	ecx
		mov	ecx, ebx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1892B
		mov	eax, [ebp+var_18]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A185B0
		mov	esi, 0C0000095h
		jmp	short loc_A185BD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A185B0:				; CODE XREF: sub_A18362+245j
		lea	edi, [ecx+8]
		cmp	edi, ecx
		jb	loc_A1863C
		xor	esi, esi

loc_A185BD:				; CODE XREF: sub_A18362+24Cj
		test	esi, esi
		js	loc_A1892B
		mov	ebx, [ebp+var_24]
		mov	edx, edi
		push	4
		pop	ecx
		mov	[ebp+var_4], ecx
		mov	eax, [ebx+10h]
		mov	ebx, [ebx+8]
		mov	[ebp+var_24], eax
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1892B
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A185FA
		xor	esi, esi
		jmp	short loc_A18602
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A185FA:				; CODE XREF: sub_A18362+292j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18602:				; CODE XREF: sub_A18362+296j
		mov	[ebp+var_4], ecx
		test	esi, esi
		js	loc_A1892B
		lea	eax, [ebp+var_4]
		mov	edx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1892B
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1863C
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		jmp	short loc_A18641
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1863C:				; CODE XREF: sub_A18362+253j
					; sub_A18362+2C8j
		mov	esi, 0C0000095h

loc_A18641:				; CODE XREF: sub_A18362+2D8j
		test	esi, esi
		js	loc_A1892B
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jnz	short loc_A1865A
		mov	esi, 0C000000Dh
		jmp	loc_A1892B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1865A:				; CODE XREF: sub_A18362+2ECj
		mov	eax, [ebp+var_8]
		lea	ebx, [edi+4]
		xor	esi, esi
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A1866F
		mov	esi, 0C000003Eh
		jmp	short loc_A1868C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1866F:				; CODE XREF: sub_A18362+304j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		test	eax, eax
		jnz	short loc_A18687
		mov	esi, 0C0000017h
		jmp	short loc_A1868C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18687:				; CODE XREF: sub_A18362+31Cj
		mov	[edi+8], eax
		and	[edi], esi

loc_A1868C:				; CODE XREF: sub_A18362+30Bj
					; sub_A18362+323j
		test	esi, esi
		js	loc_A1892B
		mov	eax, [edi+8]
		or	[ebp+var_C], 10000000h
		mov	[ebp+var_8], eax
		test	eax, eax
		jnz	short loc_A186C1
		mov	ecx, [ebx]
		push	ebx
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1892B
		inc	dword ptr [edi]
		jmp	loc_A18742
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A186C1:				; CODE XREF: sub_A18362+341j
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_14], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_24], ecx
		test	ecx, ecx
		jz	short loc_A18700

loc_A186D3:				; CODE XREF: sub_A18362+399j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A18723
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A18737
		mov	ecx, [ebp+var_14]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_14], ecx
		cmp	ecx, [ebp+var_24]
		jb	short loc_A186D3
		mov	eax, [ebp+var_8]

loc_A18700:				; CODE XREF: sub_A18362+36Fj
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A18926
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [ebx+8]
		cmp	eax, ecx
		jbe	short loc_A1872A

loc_A18719:				; CODE XREF: sub_A18362+45Dj
					; sub_A18362+50Dj ...
		mov	esi, 0C0000023h
		jmp	loc_A1892B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18723:				; CODE XREF: sub_A18362+379j
		mov	esi, 0C0000095h
		jmp	short loc_A18737
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1872A:				; CODE XREF: sub_A18362+3B5j
		mov	eax, [ebp+var_C]
		mov	dword ptr [ebx], 4
		mov	[edx], eax
		inc	dword ptr [edi]

loc_A18737:				; CODE XREF: sub_A18362+38Aj
					; sub_A18362+3C6j
		lea	ebx, [edi+4]
		test	esi, esi
		js	loc_A1892B

loc_A18742:				; CODE XREF: sub_A18362+35Aj
		mov	eax, [edi+8]
		mov	[ebp+var_C], eax
		test	eax, eax
		jnz	short loc_A18765
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1892B
		inc	dword ptr [edi]
		jmp	short loc_A187E3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18765:				; CODE XREF: sub_A18362+3E8j
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_14], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_24], ecx
		test	ecx, ecx
		jz	short loc_A187A8

loc_A18777:				; CODE XREF: sub_A18362+441j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A1880B
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A187D8
		mov	ecx, [ebp+var_14]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_14], ecx
		cmp	ecx, [ebp+var_24]
		jb	short loc_A18777
		mov	eax, [ebp+var_C]

loc_A187A8:				; CODE XREF: sub_A18362+413j
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A18926
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [ebx+0Ch]
		cmp	eax, ecx
		ja	loc_A18719
		mov	eax, [ebp+var_1C]
		mov	dword ptr [ebx], 8
		mov	[edx], eax
		mov	eax, [ebp+var_20]
		mov	[edx+4], eax
		inc	dword ptr [edi]

loc_A187D8:				; CODE XREF: sub_A18362+432j
					; sub_A18362+4AEj
		lea	ebx, [edi+4]
		test	esi, esi
		js	loc_A1892B

loc_A187E3:				; CODE XREF: sub_A18362+401j
		mov	eax, [edi+8]
		mov	[ebp+var_1C], eax
		test	eax, eax
		jnz	short loc_A18812
		mov	ecx, [ebx]
		mov	edx, 100Ch
		push	ebx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1892B
		inc	dword ptr [edi]
		jmp	loc_A18896
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1880B:				; CODE XREF: sub_A18362+41Dj
		mov	esi, 0C0000095h
		jmp	short loc_A187D8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18812:				; CODE XREF: sub_A18362+489j
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_20], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_24], ecx
		test	ecx, ecx
		jz	short loc_A18855

loc_A18824:				; CODE XREF: sub_A18362+4EEj
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	loc_A188B7
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1888B
		mov	ecx, [ebp+var_20]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_20], ecx
		cmp	ecx, [ebp+var_24]
		jb	short loc_A18824
		mov	eax, [ebp+var_1C]

loc_A18855:				; CODE XREF: sub_A18362+4C0j
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	loc_A18926
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [ebx+100Ch]
		cmp	eax, ecx
		ja	loc_A18719
		mov	eax, 1008h
		push	eax		; size_t
		push	[ebp+var_10]	; void *
		mov	[ebx], eax
		push	edx		; void *
		call	_memcpy
		add	esp, 0Ch
		inc	dword ptr [edi]

loc_A1888B:				; CODE XREF: sub_A18362+4DFj
					; sub_A18362+55Aj
		lea	ebx, [edi+4]
		test	esi, esi
		js	loc_A1892B

loc_A18896:				; CODE XREF: sub_A18362+4A4j
		mov	eax, [edi+8]
		mov	[ebp+var_1C], eax
		test	eax, eax
		jnz	short loc_A188BE
		mov	ecx, [ebx]
		push	ebx
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1892B
		inc	dword ptr [edi]
		xor	esi, esi
		jmp	short loc_A1892B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A188B7:				; CODE XREF: sub_A18362+4CAj
		mov	esi, 0C0000095h
		jmp	short loc_A1888B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A188BE:				; CODE XREF: sub_A18362+53Cj
		mov	ecx, [edi]
		mov	ebx, eax
		and	[ebp+var_20], 0
		mov	[ebp+arg_4], ebx
		mov	[ebp+var_24], ecx
		test	ecx, ecx
		jz	short loc_A188FD

loc_A188D0:				; CODE XREF: sub_A18362+596j
		mov	edx, [ebx]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A18926
		lea	eax, [ebp+arg_4]
		mov	ecx, ebx
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1892B
		mov	ecx, [ebp+var_20]
		mov	ebx, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_20], ecx
		cmp	ecx, [ebp+var_24]
		jb	short loc_A188D0
		mov	eax, [ebp+var_1C]

loc_A188FD:				; CODE XREF: sub_A18362+56Cj
		lea	edx, [ebx+4]
		cmp	edx, ebx
		jb	short loc_A18926
		mov	ecx, [edi+4]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [ebx+8]
		cmp	eax, ecx
		ja	loc_A18719
		mov	dword ptr [ebx], 4
		mov	dword ptr [edx], 1008h
		inc	dword ptr [edi]
		jmp	short loc_A1892B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18926:				; CODE XREF: sub_A18362+3A3j
					; sub_A18362+44Bj ...
		mov	esi, 0C0000095h

loc_A1892B:				; CODE XREF: sub_A18362+1ABj
					; sub_A18362+218j ...
		push	20534C53h
		push	[ebp+var_10]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A18938:				; CODE XREF: sub_A18362+A8j
					; sub_A18362+BDj ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A18362	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A18941	proc near		; CODE XREF: sub_785212+1A06p
		mov	edi, edi
		mov	eax, 0C0000002h
		retn	8
sub_A18941	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1894B	proc near		; CODE XREF: sub_785212+14B5p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		and	[ebp+var_10], 0
		mov	eax, edx
		and	[ebp+var_14], 0
		push	ebx
		xor	ebx, ebx
		mov	[ebp+var_24], eax
		mov	[ebp+var_4], ebx
		push	esi
		push	edi
		test	ecx, ecx
		jnz	short loc_A18976

loc_A1896C:				; CODE XREF: sub_A1894B+2Dj
					; sub_A1894B+34j
		mov	edx, 0C000000Dh
		jmp	loc_A18C9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18976:				; CODE XREF: sub_A1894B+1Fj
		test	eax, eax
		jz	short loc_A1896C
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jz	short loc_A1896C
		and	[ebp+var_8], ebx
		xor	esi, esi
		mov	eax, [ecx+8]
		test	eax, eax
		jnz	short loc_A18997

loc_A1898D:				; CODE XREF: sub_A1894B+4Fj
		mov	edx, 0C000000Dh
		jmp	loc_A18A21
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18997:				; CODE XREF: sub_A1894B+40j
		cmp	dword ptr [ecx], 3
		jbe	short loc_A1898D
		xor	ebx, ebx

loc_A1899E:				; CODE XREF: sub_A1894B+8Bj
		mov	ecx, [eax]
		mov	[ebp+var_1C], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A189AE
		xor	edx, edx
		jmp	short loc_A189B6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A189AE:				; CODE XREF: sub_A1894B+5Dj
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A189B6:				; CODE XREF: sub_A1894B+61j
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	short loc_A189FD
		mov	edx, [ebp+var_1C]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A189FD
		mov	eax, [ebp+arg_4]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A1899E
		mov	ebx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A189E5
		xor	edx, edx
		jmp	short loc_A189ED
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A189E5:				; CODE XREF: sub_A1894B+94j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A189ED:				; CODE XREF: sub_A1894B+98j
		test	edx, edx
		js	short loc_A189FD
		mov	esi, ebx
		mov	eax, ebx
		neg	esi
		sbb	esi, esi
		and	esi, ecx
		jmp	short loc_A18A00
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A189FD:				; CODE XREF: sub_A1894B+70j
					; sub_A1894B+82j ...
		mov	eax, [ebp+var_8]

loc_A18A00:				; CODE XREF: sub_A1894B+B0j
		test	edx, edx
		js	short loc_A18A1E
		cmp	eax, 8
		jz	short loc_A18A13

loc_A18A09:				; CODE XREF: sub_A1894B+2AFj
					; sub_A1894B+333j
		mov	edx, 0C0000023h
		jmp	loc_A18C9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18A13:				; CODE XREF: sub_A1894B+BCj
		mov	eax, [esi]
		mov	[ebp+var_10], eax
		mov	eax, [esi+4]
		mov	[ebp+var_14], eax

loc_A18A1E:				; CODE XREF: sub_A1894B+B7j
		mov	ebx, [ebp+var_4]

loc_A18A21:				; CODE XREF: sub_A1894B+47j
		test	edx, edx
		js	loc_A18C9F
		or	[ebp+var_1C], 0FFFFFFFFh
		lea	eax, [ebp+var_20]
		push	eax
		xor	esi, esi
		mov	[ebp+var_20], 0EFE82080h
		push	esi
		push	1
		push	6
		push	offset unk_6B72E0
		call	KeWaitForSingleObject
		test	eax, eax
		js	short loc_A18AC3
		cmp	eax, 0C0h
		jz	short loc_A18AC3
		cmp	eax, 102h
		jz	short loc_A18AC3
		cmp	dword_6B72C4, esi
		jnz	short loc_A18A6B
		cmp	ds:dword_A93F64, esi
		jnz	short loc_A18AB8

loc_A18A6B:				; CODE XREF: sub_A1894B+116j
		lea	eax, [ebp+var_20]
		mov	[ebp+var_20], esi
		push	eax
		mov	[ebp+var_1C], esi
		call	KeQueryTickCount
		call	_KeQueryTimeIncrement@0	; KeQueryTimeIncrement()
		push	[ebp+var_1C]
		push	[ebp+var_20]
		push	esi
		push	eax
		call	__allmul
		push	esi
		push	2710h
		push	edx
		push	eax
		call	__alldiv
		push	offset unk_6B72C0
		mov	ds:dword_A93F20, eax
		mov	ds:dword_A93F24, edx
		mov	ds:dword_A93F64, 1
		call	_KeResetEvent@4	; KeResetEvent(x)

loc_A18AB8:				; CODE XREF: sub_A1894B+11Ej
		push	esi
		push	offset unk_6B72E0
		call	_KeReleaseMutex@8 ; KeReleaseMutex(x,x)

loc_A18AC3:				; CODE XREF: sub_A1894B+100j
					; sub_A1894B+107j ...
		push	8
		pop	ecx
		mov	[ebp+arg_4], ecx
		lea	eax, [ebp+arg_4]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A18C9F
		mov	ebx, [ebp+arg_4]
		mov	[ebp+var_4], ebx
		push	8
		pop	ecx
		mov	[ebp+var_C], ecx
		lea	eax, [ebp+var_C]
		mov	edx, ebx
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A18C9F
		mov	eax, [ebp+var_C]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A18B14
		mov	edx, 0C0000095h
		jmp	short loc_A18B21
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18B14:				; CODE XREF: sub_A1894B+1C0j
		lea	esi, [ecx+8]
		cmp	esi, ecx
		jb	loc_A18BA0
		xor	edx, edx

loc_A18B21:				; CODE XREF: sub_A1894B+1C7j
		test	edx, edx
		js	loc_A18C9F
		mov	ebx, [ebp+var_24]
		mov	edx, esi
		push	4
		pop	ecx
		mov	[ebp+arg_4], ecx
		mov	eax, [ebx+10h]
		mov	ebx, [ebx+8]
		mov	[ebp+var_24], eax
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A18C9F
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18B5E
		xor	edx, edx
		jmp	short loc_A18B66
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18B5E:				; CODE XREF: sub_A1894B+20Dj
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18B66:				; CODE XREF: sub_A1894B+211j
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	loc_A18C9F
		lea	eax, [ebp+arg_4]
		mov	edx, ebx
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A18C9F
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18BA0
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		jmp	short loc_A18BA5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18BA0:				; CODE XREF: sub_A1894B+1CEj
					; sub_A1894B+243j
		mov	edx, 0C0000095h

loc_A18BA5:				; CODE XREF: sub_A1894B+253j
		test	edx, edx
		js	loc_A18C9F
		mov	eax, [ebp+var_4]
		lea	ebx, [edi+4]
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A18BC3
		mov	edx, 0C000003Eh
		jmp	loc_A18C9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18BC3:				; CODE XREF: sub_A1894B+26Cj
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A18BE0
		mov	edx, 0C0000017h
		jmp	loc_A18C9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18BE0:				; CODE XREF: sub_A1894B+289j
		mov	[edi+8], edx
		and	dword ptr [edi], 0
		lea	esi, [edx+4]
		cmp	esi, edx
		jb	loc_A18C9A
		mov	ecx, [ebx]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		ja	loc_A18A09
		mov	dword ptr [edx], 4
		mov	dword ptr [esi], 10000000h
		inc	dword ptr [edi]
		mov	ecx, [edi]
		mov	[ebp+var_24], ecx
		mov	eax, [edi+8]
		mov	[ebp+var_1C], eax
		test	eax, eax
		jnz	short loc_A18C34
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A18C9F
		inc	dword ptr [edi]
		xor	edx, edx
		jmp	short loc_A18C9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18C34:				; CODE XREF: sub_A1894B+2D0j
		and	[ebp+var_8], 0
		mov	esi, eax
		mov	[ebp+arg_4], esi
		test	ecx, ecx
		jz	short loc_A18C6B

loc_A18C41:				; CODE XREF: sub_A1894B+31Ej
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A18C9A
		lea	eax, [ebp+arg_4]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A18C9F
		mov	ecx, [ebp+var_8]
		mov	esi, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_8], ecx
		cmp	ecx, [ebp+var_24]
		jb	short loc_A18C41

loc_A18C6B:				; CODE XREF: sub_A1894B+2F4j
		lea	eax, [esi+4]
		cmp	eax, esi
		jb	short loc_A18C9A
		mov	ecx, [ebx]
		lea	eax, [esi+0Ch]
		add	ecx, [ebp+var_1C]
		xor	edx, edx
		cmp	eax, ecx
		ja	loc_A18A09
		mov	eax, [ebp+var_10]
		mov	dword ptr [esi], 8
		mov	[esi+4], eax
		mov	eax, [ebp+var_14]
		mov	[esi+8], eax
		inc	dword ptr [edi]
		jmp	short loc_A18C9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18C9A:				; CODE XREF: sub_A1894B+2A0j
					; sub_A1894B+2FEj ...
		mov	edx, 0C0000095h

loc_A18C9F:				; CODE XREF: sub_A1894B+26j
					; sub_A1894B+C3j ...
		pop	edi
		pop	esi
		mov	eax, edx
		pop	ebx
		leave
		retn	8
sub_A1894B	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A18CA8	proc near		; CODE XREF: sub_785212+19E0p

var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 54h
		push	ebx
		xor	ebx, ebx
		mov	eax, edx
		mov	[ebp+var_50], eax
		mov	edx, ecx
		mov	[ebp+var_4], edx
		mov	[ebp+var_18], ebx
		mov	[ebp+var_44], ebx
		mov	[ebp+var_48], ebx
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_20], ebx
		mov	[ebp+var_38], ebx
		mov	[ebp+var_34], ebx
		mov	[ebp+var_30], ebx
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_10], ebx
		mov	[ebp+var_3C], ebx
		push	esi
		push	edi
		test	eax, eax
		jnz	short loc_A18CEE

loc_A18CE4:				; CODE XREF: sub_A18CA8+49j
		mov	esi, 0C000000Dh
		jmp	loc_A1945F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18CEE:				; CODE XREF: sub_A18CA8+3Aj
		cmp	[ebp+arg_4], ebx
		jz	short loc_A18CE4
		mov	eax, [edx+8]
		mov	edi, ebx
		test	eax, eax
		jnz	short loc_A18D06

loc_A18CFC:				; CODE XREF: sub_A18CA8+61j
		mov	esi, 0C000000Dh
		jmp	loc_A18D89
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18D06:				; CODE XREF: sub_A18CA8+52j
		cmp	dword ptr [edx], 3
		jbe	short loc_A18CFC

loc_A18D0B:				; CODE XREF: sub_A18CA8+95j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18D18
		xor	esi, esi
		jmp	short loc_A18D20
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18D18:				; CODE XREF: sub_A18CA8+6Aj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18D20:				; CODE XREF: sub_A18CA8+6Ej
		mov	[ebp+var_8], ecx
		test	esi, esi
		js	short loc_A18D64
		lea	eax, [ebp+var_8]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A18D64
		mov	eax, [ebp+var_8]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A18D0B
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18D4C
		xor	esi, esi
		jmp	short loc_A18D54
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18D4C:				; CODE XREF: sub_A18CA8+9Ej
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18D54:				; CODE XREF: sub_A18CA8+A2j
		test	esi, esi
		js	short loc_A18D64
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A18D66
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18D64:				; CODE XREF: sub_A18CA8+7Dj
					; sub_A18CA8+8Cj ...
		mov	eax, edi

loc_A18D66:				; CODE XREF: sub_A18CA8+BAj
		test	esi, esi
		js	short loc_A18D84
		cmp	eax, 8
		jz	short loc_A18D79

loc_A18D6F:				; CODE XREF: sub_A18CA8+164j
		mov	esi, 0C0000023h
		jmp	loc_A1945F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18D79:				; CODE XREF: sub_A18CA8+C5j
		mov	eax, [edi]
		mov	[ebp+var_44], eax
		mov	eax, [edi+4]
		mov	[ebp+var_48], eax

loc_A18D84:				; CODE XREF: sub_A18CA8+C0j
		mov	edx, [ebp+var_4]
		xor	ebx, ebx

loc_A18D89:				; CODE XREF: sub_A18CA8+59j
		test	esi, esi
		js	loc_A1945F
		mov	eax, [edx+8]
		mov	edi, ebx
		mov	[ebp+var_8], ebx
		test	eax, eax
		jnz	short loc_A18DA4

loc_A18D9D:				; CODE XREF: sub_A18CA8+FFj
		mov	esi, 0C000000Dh
		jmp	short loc_A18E1C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18DA4:				; CODE XREF: sub_A18CA8+F3j
		cmp	dword ptr [edx], 4
		jbe	short loc_A18D9D

loc_A18DA9:				; CODE XREF: sub_A18CA8+133j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18DB6
		xor	esi, esi
		jmp	short loc_A18DBE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18DB6:				; CODE XREF: sub_A18CA8+108j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18DBE:				; CODE XREF: sub_A18CA8+10Cj
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	short loc_A18E02
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A18E02
		mov	eax, [ebp+var_C]
		inc	ebx
		cmp	ebx, 4
		jb	short loc_A18DA9
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18DEA
		xor	esi, esi
		jmp	short loc_A18DF2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18DEA:				; CODE XREF: sub_A18CA8+13Cj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18DF2:				; CODE XREF: sub_A18CA8+140j
		test	esi, esi
		js	short loc_A18E02
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A18E05
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18E02:				; CODE XREF: sub_A18CA8+11Bj
					; sub_A18CA8+12Aj ...
		mov	eax, [ebp+var_8]

loc_A18E05:				; CODE XREF: sub_A18CA8+158j
		test	esi, esi
		js	short loc_A18E17
		cmp	eax, 4
		jnz	loc_A18D6F
		mov	eax, [edi]
		mov	[ebp+var_3C], eax

loc_A18E17:				; CODE XREF: sub_A18CA8+15Fj
		mov	edx, [ebp+var_4]
		xor	ebx, ebx

loc_A18E1C:				; CODE XREF: sub_A18CA8+FAj
		test	esi, esi
		js	loc_A1945F
		and	[ebp+var_28], 0
		mov	ecx, ebx
		mov	eax, [edx+8]
		mov	edi, ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_4C], ecx
		test	eax, eax
		jnz	short loc_A18E43

loc_A18E39:				; CODE XREF: sub_A18CA8+19Ej
		mov	esi, 0C000000Dh
		jmp	loc_A18F27
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18E43:				; CODE XREF: sub_A18CA8+18Fj
		cmp	dword ptr [edx], 5
		jbe	short loc_A18E39
		and	[ebp+var_24], 0

loc_A18E4C:				; CODE XREF: sub_A18CA8+1E4j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18E59
		xor	esi, esi
		jmp	short loc_A18E61
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18E59:				; CODE XREF: sub_A18CA8+1ABj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18E61:				; CODE XREF: sub_A18CA8+1AFj
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	loc_A18F24
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A18F24
		mov	edx, [ebp+var_24]
		mov	eax, [ebp+var_C]
		inc	edx
		mov	[ebp+var_24], edx
		cmp	edx, 5
		jb	short loc_A18E4C
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18E9B
		xor	esi, esi
		jmp	short loc_A18EA3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18E9B:				; CODE XREF: sub_A18CA8+1EDj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18EA3:				; CODE XREF: sub_A18CA8+1F1j
		test	esi, esi
		js	short loc_A18F24
		mov	edi, edx
		mov	ebx, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		test	esi, esi
		js	short loc_A18F24
		test	ebx, ebx
		jnz	short loc_A18EEE

loc_A18EB9:				; CODE XREF: sub_A18CA8+24Cj
					; sub_A18CA8+259j ...
		mov	esi, 0C000003Eh

loc_A18EBE:				; CODE XREF: sub_A18CA8+2B1j
		test	esi, esi
		js	loc_A1945F

loc_A18EC6:				; CODE XREF: sub_A18CA8+2C4j
		mov	edx, [ebp+var_4]
		xor	ecx, ecx
		and	[ebp+var_8], 0
		xor	edi, edi
		and	[ebp+var_24], ecx
		xor	ebx, ebx
		mov	[ebp+var_4C], ecx
		mov	eax, [edx+8]
		test	eax, eax
		jnz	loc_A18F71

loc_A18EE4:				; CODE XREF: sub_A18CA8+2CCj
		mov	esi, 0C000000Dh
		jmp	loc_A19048
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18EEE:				; CODE XREF: sub_A18CA8+20Fj
		test	ebx, 1
		jnz	short loc_A18EB9
		mov	eax, ebx
		xor	ecx, ecx
		shr	eax, 1
		cmp	cx, [edi+eax*2-2]
		jnz	short loc_A18EB9
		lea	eax, [ebp+var_28]
		mov	edx, ebx
		push	eax
		mov	ecx, edi
		call	_StringCbLengthW@12 ; StringCbLengthW(x,x,x)
		test	eax, eax
		js	short loc_A18EB9
		mov	ecx, [ebp+var_28]
		lea	eax, [ecx+2]
		cmp	eax, ebx
		jnz	short loc_A18EB9
		mov	ebx, edi
		shr	ecx, 1
		jmp	short loc_A18F2A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18F24:				; CODE XREF: sub_A18CA8+1BEj
					; sub_A18CA8+1D1j ...
		mov	ecx, [ebp+var_4C]

loc_A18F27:				; CODE XREF: sub_A18CA8+196j
		mov	ebx, [ebp+var_8]

loc_A18F2A:				; CODE XREF: sub_A18CA8+27Aj
		test	esi, esi
		js	loc_A1945F
		lea	edi, ds:2[ecx*2]
		test	edi, edi
		jz	loc_A18EB9
		push	20534C53h
		push	edi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A18F5E
		mov	esi, 0C0000017h
		jmp	loc_A18EBE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18F5E:				; CODE XREF: sub_A18CA8+2AAj
		push	edi		; size_t
		push	ebx		; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	[ebp+var_1C], esi
		jmp	loc_A18EC6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18F71:				; CODE XREF: sub_A18CA8+236j
		cmp	dword ptr [edx], 6
		jbe	loc_A18EE4
		and	[ebp+var_28], ecx

loc_A18F7D:				; CODE XREF: sub_A18CA8+315j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18F8A
		xor	esi, esi
		jmp	short loc_A18F92
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18F8A:				; CODE XREF: sub_A18CA8+2DCj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18F92:				; CODE XREF: sub_A18CA8+2E0j
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	loc_A19045
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A19045
		mov	edx, [ebp+var_28]
		mov	eax, [ebp+var_C]
		inc	edx
		mov	[ebp+var_28], edx
		cmp	edx, 6
		jb	short loc_A18F7D
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A18FCC
		xor	esi, esi
		jmp	short loc_A18FD4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A18FCC:				; CODE XREF: sub_A18CA8+31Ej
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A18FD4:				; CODE XREF: sub_A18CA8+322j
		test	esi, esi
		js	short loc_A19045
		mov	edi, edx
		mov	ebx, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		test	esi, esi
		js	short loc_A19045
		test	ebx, ebx
		jnz	short loc_A1900F

loc_A18FEA:				; CODE XREF: sub_A18CA8+36Dj
					; sub_A18CA8+37Aj ...
		mov	esi, 0C000003Eh

loc_A18FEF:				; CODE XREF: sub_A18CA8+3CEj
		test	esi, esi
		js	loc_A1943B

loc_A18FF7:				; CODE XREF: sub_A18CA8+3E1j
		mov	ebx, [ebp+var_4]
		mov	eax, [ebx+8]
		test	eax, eax
		jnz	loc_A1908E

loc_A19005:				; CODE XREF: sub_A18CA8+3E9j
					; sub_A18CA8+465j ...
		mov	esi, 0C000000Dh
		jmp	loc_A1943B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1900F:				; CODE XREF: sub_A18CA8+340j
		test	ebx, 1
		jnz	short loc_A18FEA
		mov	eax, ebx
		xor	ecx, ecx
		shr	eax, 1
		cmp	cx, [edi+eax*2-2]
		jnz	short loc_A18FEA
		lea	eax, [ebp+var_24]
		mov	edx, ebx
		push	eax
		mov	ecx, edi
		call	_StringCbLengthW@12 ; StringCbLengthW(x,x,x)
		test	eax, eax
		js	short loc_A18FEA
		mov	ecx, [ebp+var_24]
		lea	eax, [ecx+2]
		cmp	eax, ebx
		jnz	short loc_A18FEA
		mov	ebx, edi
		shr	ecx, 1
		jmp	short loc_A1904B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19045:				; CODE XREF: sub_A18CA8+2EFj
					; sub_A18CA8+302j ...
		mov	ecx, [ebp+var_4C]

loc_A19048:				; CODE XREF: sub_A18CA8+241j
		mov	ebx, [ebp+var_8]

loc_A1904B:				; CODE XREF: sub_A18CA8+39Bj
		test	esi, esi
		js	loc_A1943B
		lea	edi, ds:2[ecx*2]
		test	edi, edi
		jz	short loc_A18FEA
		push	20534C53h
		push	edi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A1907B
		mov	esi, 0C0000017h
		jmp	loc_A18FEF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1907B:				; CODE XREF: sub_A18CA8+3C7j
		push	edi		; size_t
		push	ebx		; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	[ebp+var_20], esi
		jmp	loc_A18FF7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1908E:				; CODE XREF: sub_A18CA8+357j
		cmp	dword ptr [ebx], 7
		jbe	loc_A19005
		xor	edi, edi

loc_A19099:				; CODE XREF: sub_A18CA8+42Bj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A190A6
		xor	esi, esi
		jmp	short loc_A190AE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A190A6:				; CODE XREF: sub_A18CA8+3F8j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A190AE:				; CODE XREF: sub_A18CA8+3FCj
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	loc_A1943B
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1943B
		mov	eax, [ebp+var_C]
		inc	edi
		cmp	edi, 7
		jb	short loc_A19099
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A190E2
		xor	esi, esi
		jmp	short loc_A190EA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A190E2:				; CODE XREF: sub_A18CA8+434j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A190EA:				; CODE XREF: sub_A18CA8+438j
		test	esi, esi
		js	loc_A1943B
		mov	eax, edx
		mov	[ebp+var_34], edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_38], eax
		test	esi, esi
		js	loc_A1943B
		mov	eax, [ebx+8]
		test	eax, eax
		jz	loc_A19005
		cmp	dword ptr [ebx], 8
		jbe	loc_A19005
		xor	edi, edi

loc_A1911E:				; CODE XREF: sub_A18CA8+4B0j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1912B
		xor	esi, esi
		jmp	short loc_A19133
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1912B:				; CODE XREF: sub_A18CA8+47Dj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19133:				; CODE XREF: sub_A18CA8+481j
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	loc_A1943B
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1943B
		mov	eax, [ebp+var_C]
		inc	edi
		cmp	edi, 8
		jb	short loc_A1911E
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19167
		xor	esi, esi
		jmp	short loc_A1916F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19167:				; CODE XREF: sub_A18CA8+4B9j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1916F:				; CODE XREF: sub_A18CA8+4BDj
		test	esi, esi
		js	loc_A1943B
		mov	eax, edx
		mov	[ebp+var_2C], edx
		neg	eax
		sbb	eax, eax
		and	eax, ecx
		mov	[ebp+var_30], eax
		test	esi, esi
		js	loc_A1943B
		mov	eax, [ebx+8]
		test	eax, eax
		jz	loc_A19005
		cmp	dword ptr [ebx], 9
		jbe	loc_A19005
		xor	edi, edi

loc_A191A3:				; CODE XREF: sub_A18CA8+52Dj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A191B0
		xor	esi, esi
		jmp	short loc_A191B8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A191B0:				; CODE XREF: sub_A18CA8+502j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A191B8:				; CODE XREF: sub_A18CA8+506j
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	short loc_A191FA
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A191FA
		mov	eax, [ebp+var_C]
		inc	edi
		cmp	edi, 9
		jb	short loc_A191A3
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A191E4
		xor	esi, esi
		jmp	short loc_A191EC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A191E4:				; CODE XREF: sub_A18CA8+536j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A191EC:				; CODE XREF: sub_A18CA8+53Aj
		test	esi, esi
		js	short loc_A191FA
		mov	ebx, edx
		neg	edx
		sbb	edx, edx
		and	edx, ecx
		jmp	short loc_A191FF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A191FA:				; CODE XREF: sub_A18CA8+515j
					; sub_A18CA8+524j ...
		mov	edx, [ebp+var_10]
		mov	ebx, edx

loc_A191FF:				; CODE XREF: sub_A18CA8+550j
		test	esi, esi
		js	loc_A1943B
		mov	eax, ds:dword_A93EB4
		test	eax, eax
		jz	short loc_A1922D
		push	ebx
		push	edx
		push	[ebp+var_2C]
		push	[ebp+var_30]
		push	[ebp+var_34]
		push	[ebp+var_38]
		push	[ebp+var_20]
		push	[ebp+var_1C]
		push	[ebp+var_3C]
		call	eax
		mov	edi, eax
		jmp	short loc_A19232
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1922D:				; CODE XREF: sub_A18CA8+566j
		mov	edi, 0C00000BBh

loc_A19232:				; CODE XREF: sub_A18CA8+583j
		mov	esi, edi
		test	edi, edi
		js	loc_A1943B
		push	8
		pop	ecx
		mov	[ebp+var_3C], ecx
		lea	eax, [ebp+var_3C]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1925C
		mov	eax, [ebp+var_3C]
		mov	[ebp+var_18], eax
		jmp	short loc_A1925F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1925C:				; CODE XREF: sub_A18CA8+5AAj
		mov	eax, [ebp+var_18]

loc_A1925F:				; CODE XREF: sub_A18CA8+5B2j
		test	esi, esi
		js	loc_A1943B
		push	8
		pop	esi
		xor	ebx, ebx
		mov	[ebp+var_40], esi
		lea	ecx, [ebp+var_40]
		mov	edx, eax
		push	ecx
		mov	ecx, esi
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1943B
		mov	eax, [ebp+var_40]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A1929A
		mov	esi, 0C0000095h
		jmp	short loc_A192A7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1929A:				; CODE XREF: sub_A18CA8+5E9j
		lea	ebx, [ecx+8]
		cmp	ebx, ecx
		jb	loc_A1932A
		xor	esi, esi

loc_A192A7:				; CODE XREF: sub_A18CA8+5F0j
		test	esi, esi
		js	loc_A1943B
		mov	ecx, [ebp+var_50]
		mov	edx, ebx
		push	4
		mov	eax, [ecx+10h]
		mov	[ebp+var_4C], eax
		mov	eax, [ecx+8]
		mov	[ebp+var_50], eax
		lea	eax, [ebp+var_4]
		pop	ecx
		push	eax
		mov	[ebp+var_4], ecx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1943B
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A192E7
		xor	esi, esi
		jmp	short loc_A192EF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A192E7:				; CODE XREF: sub_A18CA8+639j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A192EF:				; CODE XREF: sub_A18CA8+63Dj
		mov	[ebp+var_4], ecx
		test	esi, esi
		js	loc_A1943B
		mov	edx, [ebp+var_50]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1943B
		mov	eax, [ebp+var_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1932A
		mov	edx, [ebp+var_4C]
		lea	eax, [ebp+var_4]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		jmp	short loc_A1932F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1932A:				; CODE XREF: sub_A18CA8+5F7j
					; sub_A18CA8+670j
		mov	esi, 0C0000095h

loc_A1932F:				; CODE XREF: sub_A18CA8+680j
		test	esi, esi
		js	loc_A1943B
		mov	esi, [ebp+arg_4]
		mov	eax, [ebp+var_18]
		lea	ebx, [esi+4]
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A19350
		mov	esi, 0C000003Eh
		jmp	loc_A1943B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19350:				; CODE XREF: sub_A18CA8+69Cj
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A1936D
		mov	esi, 0C0000017h
		jmp	loc_A1943B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1936D:				; CODE XREF: sub_A18CA8+6B9j
		mov	[esi+8], edx
		and	dword ptr [esi], 0
		or	edi, 10000000h
		lea	esi, [edx+4]
		cmp	esi, edx
		jb	loc_A19436
		mov	ecx, [ebx]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		jbe	short loc_A19399

loc_A1938F:				; CODE XREF: sub_A18CA8+770j
		mov	esi, 0C0000023h
		jmp	loc_A1943B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19399:				; CODE XREF: sub_A18CA8+6E5j
		mov	dword ptr [edx], 4
		mov	[esi], edi
		mov	edi, [ebp+arg_4]
		inc	dword ptr [edi]
		mov	ecx, [edi]
		mov	[ebp+var_50], ecx
		mov	eax, [edi+8]
		mov	[ebp+var_4C], eax
		test	eax, eax
		jnz	short loc_A193CC
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1943B
		inc	dword ptr [edi]
		xor	esi, esi
		jmp	short loc_A1943B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A193CC:				; CODE XREF: sub_A18CA8+70Bj
		and	[ebp+var_3C], 0
		mov	edi, eax
		mov	[ebp+var_18], edi
		test	ecx, ecx
		jz	short loc_A19406

loc_A193D9:				; CODE XREF: sub_A18CA8+759j
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A19436
		lea	eax, [ebp+var_18]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1943B
		mov	ecx, [ebp+var_3C]
		mov	edi, [ebp+var_18]
		inc	ecx
		mov	[ebp+var_3C], ecx
		cmp	ecx, [ebp+var_50]
		jb	short loc_A193D9
		mov	eax, [ebp+var_4C]

loc_A19406:				; CODE XREF: sub_A18CA8+72Fj
		lea	edx, [edi+4]
		cmp	edx, edi
		jb	short loc_A19436
		mov	ecx, [ebx]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [edi+0Ch]
		cmp	eax, ecx
		ja	loc_A1938F
		mov	eax, [ebp+var_44]
		mov	dword ptr [edi], 8
		mov	[edx], eax
		mov	eax, [ebp+var_48]
		mov	[edx+4], eax
		mov	eax, [ebp+arg_4]
		inc	dword ptr [eax]
		jmp	short loc_A1943B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19436:				; CODE XREF: sub_A18CA8+6D6j
					; sub_A18CA8+739j ...
		mov	esi, 0C0000095h

loc_A1943B:				; CODE XREF: sub_A18CA8+349j
					; sub_A18CA8+362j ...
		mov	eax, [ebp+var_1C]
		test	eax, eax
		jz	short loc_A1944D
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1944D:				; CODE XREF: sub_A18CA8+798j
		mov	eax, [ebp+var_20]
		test	eax, eax
		jz	short loc_A1945F
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1945F:				; CODE XREF: sub_A18CA8+41j
					; sub_A18CA8+CCj ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A18CA8	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A19468	proc near		; CODE XREF: sub_785212+2097p

var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 54h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		xor	eax, eax
		push	edi
		lea	edi, [ebp+var_14]
		mov	[ebp+var_24], edx
		stosd
		xor	ebx, ebx
		mov	[ebp+var_28], ecx
		mov	[ebp+var_38], esi
		mov	[ebp+var_34], ebx
		stosd
		mov	[ebp+var_54], ebx
		mov	[ebp+var_40], ebx
		mov	[ebp+var_48], ebx
		stosd
		mov	[ebp+var_44], ebx
		stosd
		test	edx, edx
		jnz	short loc_A194B1

loc_A194A7:				; CODE XREF: sub_A19468+4Bj
		mov	ebx, 0C000000Dh
		jmp	loc_A199F6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A194B1:				; CODE XREF: sub_A19468+3Dj
		test	esi, esi
		jz	short loc_A194A7
		mov	eax, [ecx+8]
		mov	edi, ebx
		mov	[ebp+var_2C], eax
		mov	edx, 0C000000Dh
		test	eax, eax
		jnz	short loc_A194CD

loc_A194C6:				; CODE XREF: sub_A19468+68j
		mov	ebx, edx
		jmp	loc_A19557
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A194CD:				; CODE XREF: sub_A19468+5Cj
		cmp	dword ptr [ecx], 3
		jbe	short loc_A194C6
		mov	[ebp+var_3C], ebx

loc_A194D5:				; CODE XREF: sub_A19468+A5j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jnb	short loc_A194E6
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A194E6:				; CODE XREF: sub_A19468+74j
		mov	[ebp+var_1C], ecx
		test	ebx, ebx
		js	short loc_A19534
		lea	eax, [ebp+var_1C]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A19534
		mov	edx, [ebp+var_3C]
		mov	eax, [ebp+var_1C]
		inc	edx
		mov	[ebp+var_3C], edx
		cmp	edx, 3
		jnb	short loc_A1950F
		xor	ebx, ebx
		jmp	short loc_A194D5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1950F:				; CODE XREF: sub_A19468+A1j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1951C
		xor	ebx, ebx
		jmp	short loc_A19524
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1951C:				; CODE XREF: sub_A19468+AEj
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19524:				; CODE XREF: sub_A19468+B2j
		test	ebx, ebx
		js	short loc_A19534
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A19536
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19534:				; CODE XREF: sub_A19468+83j
					; sub_A19468+92j ...
		mov	eax, edi

loc_A19536:				; CODE XREF: sub_A19468+CAj
		test	ebx, ebx
		js	short loc_A19554
		cmp	eax, 8
		jz	short loc_A19549
		mov	ebx, 0C0000023h
		jmp	loc_A199F6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19549:				; CODE XREF: sub_A19468+D5j
		mov	eax, [edi]
		mov	[ebp+var_54], eax
		mov	eax, [edi+4]
		mov	[ebp+var_40], eax

loc_A19554:				; CODE XREF: sub_A19468+D0j
		mov	eax, [ebp+var_2C]

loc_A19557:				; CODE XREF: sub_A19468+60j
		test	ebx, ebx
		js	loc_A199F6
		and	[ebp+var_4C], 0
		xor	ecx, ecx
		and	[ebp+var_3C], ecx
		xor	edx, edx
		xor	edi, edi
		mov	[ebp+var_30], ecx
		mov	[ebp+var_18], edx
		test	eax, eax
		jnz	short loc_A19580

loc_A19576:				; CODE XREF: sub_A19468+11Ej
		mov	ebx, 0C000000Dh
		jmp	loc_A19653
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19580:				; CODE XREF: sub_A19468+10Cj
		mov	edx, [ebp+var_28]
		cmp	dword ptr [edx], 4
		jbe	short loc_A19576
		and	[ebp+var_2C], ecx

loc_A1958B:				; CODE XREF: sub_A19468+15Bj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19598
		xor	ebx, ebx
		jmp	short loc_A195A0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19598:				; CODE XREF: sub_A19468+12Aj
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A195A0:				; CODE XREF: sub_A19468+12Ej
		mov	[ebp+var_1C], ecx
		test	ebx, ebx
		js	short loc_A195EB
		lea	eax, [ebp+var_1C]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A195EB
		mov	edx, [ebp+var_2C]
		mov	eax, [ebp+var_1C]
		inc	edx
		mov	[ebp+var_2C], edx
		cmp	edx, 4
		jb	short loc_A1958B
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A195D2
		xor	ebx, ebx
		jmp	short loc_A195DA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A195D2:				; CODE XREF: sub_A19468+164j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A195DA:				; CODE XREF: sub_A19468+168j
		test	ebx, ebx
		js	short loc_A195EB
		mov	edi, edx
		mov	[ebp+var_18], edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A195ED
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A195EB:				; CODE XREF: sub_A19468+13Dj
					; sub_A19468+14Cj ...
		mov	edx, edi

loc_A195ED:				; CODE XREF: sub_A19468+181j
		test	ebx, ebx
		js	short loc_A19650
		test	edx, edx
		jnz	short loc_A1961A

loc_A195F5:				; CODE XREF: sub_A19468+1B8j
					; sub_A19468+1C5j ...
		mov	ebx, 0C000003Eh

loc_A195FA:				; CODE XREF: sub_A19468+216j
		test	ebx, ebx
		js	loc_A199F6

loc_A19602:				; CODE XREF: sub_A19468+22Bj
		mov	ecx, [ebp+var_28]
		mov	eax, [ecx+8]
		test	eax, eax
		jnz	loc_A19698

loc_A19610:				; CODE XREF: sub_A19468+233j
		mov	ebx, 0C000000Dh
		jmp	loc_A199E4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1961A:				; CODE XREF: sub_A19468+18Bj
		test	edx, 1
		jnz	short loc_A195F5
		mov	eax, edx
		xor	ecx, ecx
		shr	eax, 1
		cmp	cx, [edi+eax*2-2]
		jnz	short loc_A195F5
		lea	eax, [ebp+var_3C]
		mov	ecx, edi
		push	eax
		call	_StringCbLengthW@12 ; StringCbLengthW(x,x,x)
		test	eax, eax
		js	short loc_A195F5
		mov	ecx, [ebp+var_3C]
		lea	eax, [ecx+2]
		cmp	eax, [ebp+var_18]
		jnz	short loc_A195F5
		mov	[ebp+var_4C], edi
		shr	ecx, 1
		jmp	short loc_A19653
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19650:				; CODE XREF: sub_A19468+187j
		mov	ecx, [ebp+var_30]

loc_A19653:				; CODE XREF: sub_A19468+113j
					; sub_A19468+1E6j
		test	ebx, ebx
		js	loc_A199F6
		lea	ebx, ds:2[ecx*2]
		test	ebx, ebx
		jz	short loc_A195F5
		push	20534C53h
		push	ebx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A19683
		mov	ebx, 0C0000017h
		jmp	loc_A195FA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19683:				; CODE XREF: sub_A19468+20Fj
		push	ebx		; size_t
		push	[ebp+var_4C]	; void *
		push	edi		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	[ebp+var_48], edi
		jmp	loc_A19602
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19698:				; CODE XREF: sub_A19468+1A2j
		cmp	dword ptr [ecx], 5
		jbe	loc_A19610
		xor	edi, edi

loc_A196A3:				; CODE XREF: sub_A19468+26Dj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A196B0
		xor	ebx, ebx
		jmp	short loc_A196B8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A196B0:				; CODE XREF: sub_A19468+242j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A196B8:				; CODE XREF: sub_A19468+246j
		mov	[ebp+var_1C], ecx
		test	ebx, ebx
		js	short loc_A196FA
		lea	eax, [ebp+var_1C]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A196FA
		mov	eax, [ebp+var_1C]
		inc	edi
		cmp	edi, 5
		jb	short loc_A196A3
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A196E4
		xor	ebx, ebx
		jmp	short loc_A196EC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A196E4:				; CODE XREF: sub_A19468+276j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A196EC:				; CODE XREF: sub_A19468+27Aj
		test	ebx, ebx
		js	short loc_A196FA
		mov	edi, edx
		neg	edx
		sbb	edx, edx
		and	edx, ecx
		jmp	short loc_A196FF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A196FA:				; CODE XREF: sub_A19468+255j
					; sub_A19468+264j ...
		mov	edx, [ebp+var_44]
		mov	edi, edx

loc_A196FF:				; CODE XREF: sub_A19468+290j
		test	ebx, ebx
		js	loc_A199E4
		mov	eax, ds:dword_A93E90
		test	eax, eax
		jz	short loc_A1971D
		lea	ecx, [ebp+var_14]
		push	ecx
		push	edi
		push	edx
		push	[ebp+var_48]
		call	eax
		jmp	short loc_A19722
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1971D:				; CODE XREF: sub_A19468+2A6j
		mov	eax, 0C000A281h

loc_A19722:				; CODE XREF: sub_A19468+2B3j
		mov	[ebp+var_1C], eax
		push	8
		pop	ecx
		mov	[ebp+var_28], ecx
		lea	eax, [ebp+var_28]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A19745
		mov	eax, [ebp+var_28]
		mov	[ebp+var_34], eax
		jmp	short loc_A19748
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19745:				; CODE XREF: sub_A19468+2D3j
		mov	eax, [ebp+var_34]

loc_A19748:				; CODE XREF: sub_A19468+2DBj
		test	ebx, ebx
		js	loc_A199E4
		lea	ecx, [ebp+var_34]
		push	ecx
		push	14h
		pop	edx
		mov	ecx, eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A199E4
		push	8
		pop	ecx
		xor	edi, edi
		mov	[ebp+var_50], ecx
		mov	edx, [ebp+var_34]
		lea	eax, [ebp+var_50]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A199E4
		mov	eax, [ebp+var_50]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A1979A
		mov	ebx, 0C0000095h
		jmp	short loc_A197A7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1979A:				; CODE XREF: sub_A19468+329j
		lea	edi, [ecx+8]
		cmp	edi, ecx
		jb	loc_A1982A
		xor	ebx, ebx

loc_A197A7:				; CODE XREF: sub_A19468+330j
		test	ebx, ebx
		js	loc_A199E4
		mov	ecx, [ebp+var_24]
		mov	edx, edi
		push	4
		mov	eax, [ecx+10h]
		mov	[ebp+var_30], eax
		mov	eax, [ecx+8]
		mov	[ebp+var_24], eax
		lea	eax, [ebp+var_18]
		pop	ecx
		push	eax
		mov	[ebp+var_18], ecx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A199E4
		mov	eax, [ebp+var_18]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A197E7
		xor	ebx, ebx
		jmp	short loc_A197EF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A197E7:				; CODE XREF: sub_A19468+379j
		mov	ebx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A197EF:				; CODE XREF: sub_A19468+37Dj
		mov	[ebp+var_18], ecx
		test	ebx, ebx
		js	loc_A199E4
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A199E4
		mov	eax, [ebp+var_18]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1982A
		mov	edx, [ebp+var_30]
		lea	eax, [ebp+var_18]
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		jmp	short loc_A1982F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1982A:				; CODE XREF: sub_A19468+337j
					; sub_A19468+3B0j
		mov	ebx, 0C0000095h

loc_A1982F:				; CODE XREF: sub_A19468+3C0j
		test	ebx, ebx
		js	loc_A199E4
		mov	eax, [ebp+var_34]
		lea	edi, [esi+4]
		mov	[edi], eax
		test	eax, eax
		jnz	short loc_A1984D
		mov	ebx, 0C000003Eh
		jmp	loc_A199E4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1984D:				; CODE XREF: sub_A19468+3D9j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A1986A
		mov	ebx, 0C0000017h
		jmp	loc_A199E4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1986A:				; CODE XREF: sub_A19468+3F6j
		mov	[esi+8], edx
		and	dword ptr [esi], 0
		or	[ebp+var_1C], 10000000h
		lea	ebx, [edx+4]
		cmp	ebx, edx
		jb	loc_A199DF
		mov	ecx, [edi]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		jbe	short loc_A19897

loc_A1988D:				; CODE XREF: sub_A19468+4B4j
					; sub_A19468+55Dj
		mov	ebx, 0C0000023h
		jmp	loc_A199E4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19897:				; CODE XREF: sub_A19468+423j
		mov	eax, [ebp+var_1C]
		mov	dword ptr [edx], 4
		mov	[ebx], eax
		inc	dword ptr [esi]
		mov	ecx, [esi]
		mov	[ebp+var_24], ecx
		mov	eax, [esi+8]
		mov	[ebp+var_30], eax
		test	eax, eax
		jnz	short loc_A198CC
		mov	ecx, [edi]
		push	edi
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A199E4
		inc	dword ptr [esi]
		jmp	short loc_A1994A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A198CC:				; CODE XREF: sub_A19468+449j
		and	[ebp+var_28], 0
		mov	esi, eax
		mov	[ebp+var_20], esi
		test	ecx, ecx
		jz	short loc_A19906

loc_A198D9:				; CODE XREF: sub_A19468+499j
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A1993A
		lea	eax, [ebp+var_20]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1993F
		mov	ecx, [ebp+var_28]
		mov	esi, [ebp+var_20]
		inc	ecx
		mov	[ebp+var_28], ecx
		cmp	ecx, [ebp+var_24]
		jb	short loc_A198D9
		mov	eax, [ebp+var_30]

loc_A19906:				; CODE XREF: sub_A19468+46Fj
		lea	edx, [esi+4]
		cmp	edx, esi
		jb	loc_A199DF
		mov	ecx, [edi]
		xor	ebx, ebx
		add	ecx, eax
		lea	eax, [esi+0Ch]
		cmp	eax, ecx
		ja	loc_A1988D
		mov	eax, [ebp+var_54]
		mov	dword ptr [esi], 8
		mov	esi, [ebp+var_38]
		mov	[edx], eax
		mov	eax, [ebp+var_40]
		mov	[edx+4], eax
		inc	dword ptr [esi]
		jmp	short loc_A19942
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1993A:				; CODE XREF: sub_A19468+479j
		mov	ebx, 0C0000095h

loc_A1993F:				; CODE XREF: sub_A19468+48Aj
		mov	esi, [ebp+var_38]

loc_A19942:				; CODE XREF: sub_A19468+4D0j
		test	ebx, ebx
		js	loc_A199E4

loc_A1994A:				; CODE XREF: sub_A19468+462j
		mov	eax, [esi+8]
		mov	[ebp+var_30], eax
		test	eax, eax
		jnz	short loc_A1996B
		mov	ecx, [edi]
		push	edi
		push	14h
		pop	edx
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A199E4
		inc	dword ptr [esi]
		xor	ebx, ebx
		jmp	short loc_A199E4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1996B:				; CODE XREF: sub_A19468+4EAj
		mov	edx, [ebp+var_38]
		mov	esi, eax
		and	[ebp+var_40], 0
		mov	[ebp+var_20], esi
		mov	ecx, [edx]
		mov	[ebp+var_24], ecx
		test	ecx, ecx
		jz	short loc_A199B0

loc_A19980:				; CODE XREF: sub_A19468+540j
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A199DF
		lea	eax, [ebp+var_20]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A199E4
		mov	ecx, [ebp+var_40]
		mov	esi, [ebp+var_20]
		inc	ecx
		mov	[ebp+var_40], ecx
		cmp	ecx, [ebp+var_24]
		jb	short loc_A19980
		mov	edx, [ebp+var_38]
		mov	eax, [ebp+var_30]

loc_A199B0:				; CODE XREF: sub_A19468+516j
		lea	ecx, [esi+4]
		mov	[ebp+var_24], ecx
		cmp	ecx, esi
		jb	short loc_A199DF
		mov	ecx, [edi]
		xor	ebx, ebx
		add	ecx, eax
		lea	eax, [esi+14h]
		cmp	eax, ecx
		ja	loc_A1988D
		mov	edi, [ebp+var_24]
		mov	dword ptr [esi], 10h
		lea	esi, [ebp+var_14]
		movsd
		movsd
		movsd
		movsd
		inc	dword ptr [edx]
		jmp	short loc_A199E4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A199DF:				; CODE XREF: sub_A19468+414j
					; sub_A19468+4A3j ...
		mov	ebx, 0C0000095h

loc_A199E4:				; CODE XREF: sub_A19468+1ADj
					; sub_A19468+299j ...
		mov	eax, [ebp+var_48]
		test	eax, eax
		jz	short loc_A199F6
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A199F6:				; CODE XREF: sub_A19468+44j
					; sub_A19468+DCj ...
		mov	ecx, [ebp+var_4]
		mov	eax, ebx
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	8
sub_A19468	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A19A09	proc near		; CODE XREF: sub_785212+1A1Cp

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	ebx
		mov	eax, edx
		mov	[ebp+var_10], ecx
		xor	edx, edx
		mov	[ebp+var_28], eax
		mov	[ebp+var_8], edx
		mov	[ebp+var_1C], edx
		mov	[ebp+var_20], edx
		mov	[ebp+var_14], edx
		push	esi
		push	edi
		mov	edi, edx
		test	eax, eax
		jnz	short loc_A19A3A

loc_A19A30:				; CODE XREF: sub_A19A09+36j
					; sub_A19A09+EEj ...
		mov	edx, 0C000000Dh
		jmp	loc_A19D7F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19A3A:				; CODE XREF: sub_A19A09+25j
		mov	ebx, [ebp+arg_4]
		test	ebx, ebx
		jz	short loc_A19A30
		mov	eax, [ecx+8]
		mov	esi, edx
		mov	[ebp+var_C], edx
		test	eax, eax
		jnz	short loc_A19A57

loc_A19A4D:				; CODE XREF: sub_A19A09+51j
		mov	edx, 0C000000Dh
		jmp	loc_A19AEA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19A57:				; CODE XREF: sub_A19A09+42j
		cmp	dword ptr [ecx], 3
		jbe	short loc_A19A4D
		mov	[ebp+var_4], edx

loc_A19A5F:				; CODE XREF: sub_A19A09+94j
		mov	ecx, [eax]
		mov	[ebp+var_24], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jnb	short loc_A19A73
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19A73:				; CODE XREF: sub_A19A09+60j
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	short loc_A19AE7
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A19AE7
		mov	edx, [ebp+var_4]
		mov	eax, [ebp+arg_4]
		inc	edx
		mov	[ebp+var_4], edx
		cmp	edx, 3
		jnb	short loc_A19A9F
		xor	edx, edx
		jmp	short loc_A19A5F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19A9F:				; CODE XREF: sub_A19A09+90j
		mov	ecx, [eax]
		mov	[ebp+arg_4], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19AAF
		xor	edx, edx
		jmp	short loc_A19AB7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19AAF:				; CODE XREF: sub_A19A09+A0j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19AB7:				; CODE XREF: sub_A19A09+A4j
		test	edx, edx
		js	short loc_A19AE7
		mov	eax, [ebp+arg_4]
		mov	esi, eax
		neg	esi
		mov	[ebp+var_C], eax
		sbb	esi, esi
		and	esi, ecx
		test	edx, edx
		js	short loc_A19AE7
		cmp	eax, 8
		jz	short loc_A19ADC

loc_A19AD2:				; CODE XREF: sub_A19A09+2D2j
					; sub_A19A09+355j
		mov	edx, 0C0000023h
		jmp	loc_A19D7F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19ADC:				; CODE XREF: sub_A19A09+C7j
		mov	eax, [esi]
		mov	[ebp+var_1C], eax
		mov	eax, [esi+4]
		mov	[ebp+var_20], eax

loc_A19AE7:				; CODE XREF: sub_A19A09+6Fj
					; sub_A19A09+81j ...
		mov	ecx, [ebp+var_10]

loc_A19AEA:				; CODE XREF: sub_A19A09+49j
		test	edx, edx
		js	loc_A19D7F
		mov	eax, [ecx+8]
		test	eax, eax
		jz	loc_A19A30
		cmp	dword ptr [ecx], 4
		jbe	loc_A19A30
		xor	esi, esi

loc_A19B08:				; CODE XREF: sub_A19A09+13Fj
		mov	ecx, [eax]
		mov	[ebp+var_24], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19B18
		xor	edx, edx
		jmp	short loc_A19B20
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19B18:				; CODE XREF: sub_A19A09+109j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19B20:				; CODE XREF: sub_A19A09+10Dj
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	loc_A19D7F
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A19D7F
		mov	eax, [ebp+arg_4]
		inc	esi
		cmp	esi, 4
		jb	short loc_A19B08
		mov	esi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19B57
		xor	edx, edx
		jmp	short loc_A19B5F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19B57:				; CODE XREF: sub_A19A09+148j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19B5F:				; CODE XREF: sub_A19A09+14Cj
		test	edx, edx
		js	loc_A19D7F
		mov	edi, esi
		mov	[ebp+var_14], esi
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		test	edx, edx
		js	loc_A19D7F
		mov	eax, ds:dword_A93E60
		test	eax, eax
		jz	short loc_A19B89
		push	esi
		push	edi
		call	eax
		jmp	short loc_A19B8E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19B89:				; CODE XREF: sub_A19A09+178j
		mov	eax, 0C00000BBh

loc_A19B8E:				; CODE XREF: sub_A19A09+17Ej
		mov	[ebp+var_4], eax
		push	8
		pop	edi
		mov	[ebp+arg_4], edi
		lea	eax, [ebp+arg_4]
		mov	ecx, edi
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A19BB3
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_8], eax
		jmp	short loc_A19BB6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19BB3:				; CODE XREF: sub_A19A09+1A0j
		mov	eax, [ebp+var_8]

loc_A19BB6:				; CODE XREF: sub_A19A09+1A8j
		test	edx, edx
		js	loc_A19D7F
		xor	esi, esi
		mov	[ebp+var_18], edi
		lea	ecx, [ebp+var_18]
		mov	edx, eax
		push	ecx
		mov	ecx, edi
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A19D7F
		mov	eax, [ebp+var_18]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A19BEE
		mov	edx, 0C0000095h
		jmp	short loc_A19BFB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19BEE:				; CODE XREF: sub_A19A09+1DCj
		lea	esi, [ecx+8]
		cmp	esi, ecx
		jb	loc_A19C7A
		xor	edx, edx

loc_A19BFB:				; CODE XREF: sub_A19A09+1E3j
		test	edx, edx
		js	loc_A19D7F
		mov	edi, [ebp+var_28]
		mov	edx, esi
		push	4
		pop	ecx
		mov	[ebp+arg_4], ecx
		mov	eax, [edi+10h]
		mov	edi, [edi+8]
		mov	[ebp+var_28], eax
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A19D7F
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19C38
		xor	edx, edx
		jmp	short loc_A19C40
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19C38:				; CODE XREF: sub_A19A09+229j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19C40:				; CODE XREF: sub_A19A09+22Dj
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	loc_A19D7F
		lea	eax, [ebp+arg_4]
		mov	edx, edi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A19D7F
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19C7A
		mov	edx, [ebp+var_28]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		jmp	short loc_A19C7F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19C7A:				; CODE XREF: sub_A19A09+1EAj
					; sub_A19A09+25Fj
		mov	edx, 0C0000095h

loc_A19C7F:				; CODE XREF: sub_A19A09+26Fj
		test	edx, edx
		js	loc_A19D7F
		mov	eax, [ebp+var_8]
		lea	edi, [ebx+4]
		mov	[edi], eax
		test	eax, eax
		jnz	short loc_A19C9D
		mov	edx, 0C000003Eh
		jmp	loc_A19D7F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19C9D:				; CODE XREF: sub_A19A09+288j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A19CBA
		mov	edx, 0C0000017h
		jmp	loc_A19D7F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19CBA:				; CODE XREF: sub_A19A09+2A5j
		mov	[ebx+8], edx
		and	dword ptr [ebx], 0
		or	[ebp+var_4], 10000000h
		lea	esi, [edx+4]
		cmp	esi, edx
		jb	loc_A19D7A
		mov	ecx, [edi]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		ja	loc_A19AD2
		mov	eax, [ebp+var_4]
		mov	dword ptr [edx], 4
		mov	[esi], eax
		inc	dword ptr [ebx]
		mov	ecx, [ebx]
		mov	[ebp+var_28], ecx
		mov	eax, [ebx+8]
		mov	[ebp+var_24], eax
		test	eax, eax
		jnz	short loc_A19D14
		mov	ecx, [edi]
		push	edi
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A19D7F
		inc	dword ptr [ebx]
		xor	edx, edx
		jmp	short loc_A19D7F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19D14:				; CODE XREF: sub_A19A09+2F2j
		and	[ebp+var_14], 0
		mov	esi, eax
		mov	[ebp+arg_4], esi
		test	ecx, ecx
		jz	short loc_A19D4B

loc_A19D21:				; CODE XREF: sub_A19A09+340j
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A19D7A
		lea	eax, [ebp+arg_4]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A19D7F
		mov	ecx, [ebp+var_14]
		mov	esi, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_14], ecx
		cmp	ecx, [ebp+var_28]
		jb	short loc_A19D21

loc_A19D4B:				; CODE XREF: sub_A19A09+316j
		lea	eax, [esi+4]
		cmp	eax, esi
		jb	short loc_A19D7A
		mov	ecx, [edi]
		lea	eax, [esi+0Ch]
		add	ecx, [ebp+var_24]
		xor	edx, edx
		cmp	eax, ecx
		ja	loc_A19AD2
		mov	eax, [ebp+var_1C]
		mov	dword ptr [esi], 8
		mov	[esi+4], eax
		mov	eax, [ebp+var_20]
		mov	[esi+8], eax
		inc	dword ptr [ebx]
		jmp	short loc_A19D7F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19D7A:				; CODE XREF: sub_A19A09+2C3j
					; sub_A19A09+320j ...
		mov	edx, 0C0000095h

loc_A19D7F:				; CODE XREF: sub_A19A09+2Cj
					; sub_A19A09+CEj ...
		pop	edi
		pop	esi
		mov	eax, edx
		pop	ebx
		leave
		retn	8
sub_A19A09	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A19D88	proc near		; CODE XREF: sub_785212+1B9Bp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		mov	esi, edx
		push	edi
		test	esi, esi
		jnz	short loc_A19DA3
		mov	edx, 0C000000Dh
		jmp	loc_A19E95
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19DA3:				; CODE XREF: sub_A19D88+Fj
		mov	eax, [esi+8]
		mov	[ebp+var_C], eax
		test	eax, eax
		jnz	short loc_A19DC9
		lea	ecx, [esi+4]
		push	ecx
		mov	ecx, [ecx]
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A19E95
		inc	dword ptr [esi]
		jmp	short loc_A19E3D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19DC9:				; CODE XREF: sub_A19D88+23j
		mov	ecx, [esi]
		mov	edi, eax
		xor	ebx, ebx
		mov	[ebp+var_4], edi
		mov	[ebp+var_8], ecx
		test	ecx, ecx
		jz	short loc_A19E04

loc_A19DD9:				; CODE XREF: sub_A19D88+77j
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A19E24
		lea	eax, [ebp+var_4]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A19E95
		mov	edi, [ebp+var_4]
		inc	ebx
		cmp	ebx, [ebp+var_8]
		jb	short loc_A19DD9
		mov	eax, [ebp+var_C]

loc_A19E04:				; CODE XREF: sub_A19D88+4Fj
		lea	ebx, [edi+4]
		cmp	ebx, edi
		jb	loc_A19E90
		mov	ecx, [esi+4]
		xor	edx, edx
		add	ecx, eax
		lea	eax, [edi+8]
		cmp	eax, ecx
		jbe	short loc_A19E2B

loc_A19E1D:				; CODE XREF: sub_A19D88+F6j
		mov	edx, 0C0000023h
		jmp	short loc_A19E95
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19E24:				; CODE XREF: sub_A19D88+59j
		mov	edx, 0C0000095h
		jmp	short loc_A19E39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19E2B:				; CODE XREF: sub_A19D88+93j
		mov	dword ptr [edi], 4
		mov	dword ptr [ebx], 80004001h
		inc	dword ptr [esi]

loc_A19E39:				; CODE XREF: sub_A19D88+A1j
		test	edx, edx
		js	short loc_A19E95

loc_A19E3D:				; CODE XREF: sub_A19D88+3Fj
		mov	eax, [esi+4]
		test	eax, eax
		jnz	short loc_A19E4B
		mov	edx, 0C000003Eh
		jmp	short loc_A19E95
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19E4B:				; CODE XREF: sub_A19D88+BAj
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A19E65
		mov	edx, 0C0000017h
		jmp	short loc_A19E95
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19E65:				; CODE XREF: sub_A19D88+D4j
		mov	[esi+8], edi
		and	dword ptr [esi], 0
		lea	ebx, [edi+4]
		cmp	ebx, edi
		jb	short loc_A19E90
		mov	ecx, [esi+4]
		lea	eax, [edi+8]
		add	ecx, edi
		xor	edx, edx
		cmp	eax, ecx
		ja	short loc_A19E1D
		mov	dword ptr [edi], 4
		mov	dword ptr [ebx], 80004001h
		inc	dword ptr [esi]
		jmp	short loc_A19E95
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19E90:				; CODE XREF: sub_A19D88+81j
					; sub_A19D88+E8j
		mov	edx, 0C0000095h

loc_A19E95:				; CODE XREF: sub_A19D88+16j
					; sub_A19D88+37j ...
		pop	edi
		pop	esi
		mov	eax, edx
		pop	ebx
		leave
		retn
sub_A19D88	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A19E9C	proc near		; CODE XREF: sub_785212+1A32p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	ebx
		mov	eax, edx
		mov	[ebp+var_10], ecx
		xor	edx, edx
		mov	[ebp+var_28], eax
		mov	[ebp+var_8], edx
		mov	[ebp+var_1C], edx
		mov	[ebp+var_20], edx
		mov	[ebp+var_14], edx
		push	esi
		push	edi
		mov	edi, edx
		test	eax, eax
		jnz	short loc_A19ECD

loc_A19EC3:				; CODE XREF: sub_A19E9C+36j
					; sub_A19E9C+EEj ...
		mov	edx, 0C000000Dh
		jmp	loc_A1A212
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19ECD:				; CODE XREF: sub_A19E9C+25j
		mov	ebx, [ebp+arg_4]
		test	ebx, ebx
		jz	short loc_A19EC3
		mov	eax, [ecx+8]
		mov	esi, edx
		mov	[ebp+var_C], edx
		test	eax, eax
		jnz	short loc_A19EEA

loc_A19EE0:				; CODE XREF: sub_A19E9C+51j
		mov	edx, 0C000000Dh
		jmp	loc_A19F7D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19EEA:				; CODE XREF: sub_A19E9C+42j
		cmp	dword ptr [ecx], 3
		jbe	short loc_A19EE0
		mov	[ebp+var_4], edx

loc_A19EF2:				; CODE XREF: sub_A19E9C+94j
		mov	ecx, [eax]
		mov	[ebp+var_24], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jnb	short loc_A19F06
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19F06:				; CODE XREF: sub_A19E9C+60j
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	short loc_A19F7A
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A19F7A
		mov	edx, [ebp+var_4]
		mov	eax, [ebp+arg_4]
		inc	edx
		mov	[ebp+var_4], edx
		cmp	edx, 3
		jnb	short loc_A19F32
		xor	edx, edx
		jmp	short loc_A19EF2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19F32:				; CODE XREF: sub_A19E9C+90j
		mov	ecx, [eax]
		mov	[ebp+arg_4], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19F42
		xor	edx, edx
		jmp	short loc_A19F4A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19F42:				; CODE XREF: sub_A19E9C+A0j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19F4A:				; CODE XREF: sub_A19E9C+A4j
		test	edx, edx
		js	short loc_A19F7A
		mov	eax, [ebp+arg_4]
		mov	esi, eax
		neg	esi
		mov	[ebp+var_C], eax
		sbb	esi, esi
		and	esi, ecx
		test	edx, edx
		js	short loc_A19F7A
		cmp	eax, 8
		jz	short loc_A19F6F

loc_A19F65:				; CODE XREF: sub_A19E9C+2D2j
					; sub_A19E9C+355j
		mov	edx, 0C0000023h
		jmp	loc_A1A212
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19F6F:				; CODE XREF: sub_A19E9C+C7j
		mov	eax, [esi]
		mov	[ebp+var_1C], eax
		mov	eax, [esi+4]
		mov	[ebp+var_20], eax

loc_A19F7A:				; CODE XREF: sub_A19E9C+6Fj
					; sub_A19E9C+81j ...
		mov	ecx, [ebp+var_10]

loc_A19F7D:				; CODE XREF: sub_A19E9C+49j
		test	edx, edx
		js	loc_A1A212
		mov	eax, [ecx+8]
		test	eax, eax
		jz	loc_A19EC3
		cmp	dword ptr [ecx], 4
		jbe	loc_A19EC3
		xor	esi, esi

loc_A19F9B:				; CODE XREF: sub_A19E9C+13Fj
		mov	ecx, [eax]
		mov	[ebp+var_24], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19FAB
		xor	edx, edx
		jmp	short loc_A19FB3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19FAB:				; CODE XREF: sub_A19E9C+109j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19FB3:				; CODE XREF: sub_A19E9C+10Dj
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	loc_A1A212
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A1A212
		mov	eax, [ebp+arg_4]
		inc	esi
		cmp	esi, 4
		jb	short loc_A19F9B
		mov	esi, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A19FEA
		xor	edx, edx
		jmp	short loc_A19FF2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A19FEA:				; CODE XREF: sub_A19E9C+148j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A19FF2:				; CODE XREF: sub_A19E9C+14Cj
		test	edx, edx
		js	loc_A1A212
		mov	edi, esi
		mov	[ebp+var_14], esi
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		test	edx, edx
		js	loc_A1A212
		mov	eax, ds:dword_A93E64
		test	eax, eax
		jz	short loc_A1A01C
		push	esi
		push	edi
		call	eax
		jmp	short loc_A1A021
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A01C:				; CODE XREF: sub_A19E9C+178j
		mov	eax, 0C00000BBh

loc_A1A021:				; CODE XREF: sub_A19E9C+17Ej
		mov	[ebp+var_4], eax
		push	8
		pop	edi
		mov	[ebp+arg_4], edi
		lea	eax, [ebp+arg_4]
		mov	ecx, edi
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A1A046
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_8], eax
		jmp	short loc_A1A049
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A046:				; CODE XREF: sub_A19E9C+1A0j
		mov	eax, [ebp+var_8]

loc_A1A049:				; CODE XREF: sub_A19E9C+1A8j
		test	edx, edx
		js	loc_A1A212
		xor	esi, esi
		mov	[ebp+var_18], edi
		lea	ecx, [ebp+var_18]
		mov	edx, eax
		push	ecx
		mov	ecx, edi
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A1A212
		mov	eax, [ebp+var_18]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A1A081
		mov	edx, 0C0000095h
		jmp	short loc_A1A08E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A081:				; CODE XREF: sub_A19E9C+1DCj
		lea	esi, [ecx+8]
		cmp	esi, ecx
		jb	loc_A1A10D
		xor	edx, edx

loc_A1A08E:				; CODE XREF: sub_A19E9C+1E3j
		test	edx, edx
		js	loc_A1A212
		mov	edi, [ebp+var_28]
		mov	edx, esi
		push	4
		pop	ecx
		mov	[ebp+arg_4], ecx
		mov	eax, [edi+10h]
		mov	edi, [edi+8]
		mov	[ebp+var_28], eax
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A1A212
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A0CB
		xor	edx, edx
		jmp	short loc_A1A0D3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A0CB:				; CODE XREF: sub_A19E9C+229j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A0D3:				; CODE XREF: sub_A19E9C+22Dj
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	loc_A1A212
		lea	eax, [ebp+arg_4]
		mov	edx, edi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A1A212
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A10D
		mov	edx, [ebp+var_28]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		jmp	short loc_A1A112
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A10D:				; CODE XREF: sub_A19E9C+1EAj
					; sub_A19E9C+25Fj
		mov	edx, 0C0000095h

loc_A1A112:				; CODE XREF: sub_A19E9C+26Fj
		test	edx, edx
		js	loc_A1A212
		mov	eax, [ebp+var_8]
		lea	edi, [ebx+4]
		mov	[edi], eax
		test	eax, eax
		jnz	short loc_A1A130
		mov	edx, 0C000003Eh
		jmp	loc_A1A212
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A130:				; CODE XREF: sub_A19E9C+288j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A1A14D
		mov	edx, 0C0000017h
		jmp	loc_A1A212
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A14D:				; CODE XREF: sub_A19E9C+2A5j
		mov	[ebx+8], edx
		and	dword ptr [ebx], 0
		or	[ebp+var_4], 10000000h
		lea	esi, [edx+4]
		cmp	esi, edx
		jb	loc_A1A20D
		mov	ecx, [edi]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		ja	loc_A19F65
		mov	eax, [ebp+var_4]
		mov	dword ptr [edx], 4
		mov	[esi], eax
		inc	dword ptr [ebx]
		mov	ecx, [ebx]
		mov	[ebp+var_28], ecx
		mov	eax, [ebx+8]
		mov	[ebp+var_24], eax
		test	eax, eax
		jnz	short loc_A1A1A7
		mov	ecx, [edi]
		push	edi
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A1A212
		inc	dword ptr [ebx]
		xor	edx, edx
		jmp	short loc_A1A212
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A1A7:				; CODE XREF: sub_A19E9C+2F2j
		and	[ebp+var_14], 0
		mov	esi, eax
		mov	[ebp+arg_4], esi
		test	ecx, ecx
		jz	short loc_A1A1DE

loc_A1A1B4:				; CODE XREF: sub_A19E9C+340j
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A1A20D
		lea	eax, [ebp+arg_4]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A1A212
		mov	ecx, [ebp+var_14]
		mov	esi, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_14], ecx
		cmp	ecx, [ebp+var_28]
		jb	short loc_A1A1B4

loc_A1A1DE:				; CODE XREF: sub_A19E9C+316j
		lea	eax, [esi+4]
		cmp	eax, esi
		jb	short loc_A1A20D
		mov	ecx, [edi]
		lea	eax, [esi+0Ch]
		add	ecx, [ebp+var_24]
		xor	edx, edx
		cmp	eax, ecx
		ja	loc_A19F65
		mov	eax, [ebp+var_1C]
		mov	dword ptr [esi], 8
		mov	[esi+4], eax
		mov	eax, [ebp+var_20]
		mov	[esi+8], eax
		inc	dword ptr [ebx]
		jmp	short loc_A1A212
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A20D:				; CODE XREF: sub_A19E9C+2C3j
					; sub_A19E9C+320j ...
		mov	edx, 0C0000095h

loc_A1A212:				; CODE XREF: sub_A19E9C+2Cj
					; sub_A19E9C+CEj ...
		pop	edi
		pop	esi
		mov	eax, edx
		pop	ebx
		leave
		retn	8
sub_A19E9C	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1A21B	proc near		; CODE XREF: sub_785212+1AB5p

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	ebx
		xor	ebx, ebx
		mov	[ebp+var_20], ecx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_14], ebx
		mov	[ebp+var_24], ebx
		mov	[ebp+var_4], ebx
		push	esi
		push	edi
		test	ecx, ecx
		jnz	short loc_A1A248

loc_A1A23E:				; CODE XREF: sub_A1A21B+2Fj
					; sub_A1A21B+34j
		mov	esi, 0C000000Dh
		jmp	loc_A1A714
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A248:				; CODE XREF: sub_A1A21B+21j
		test	edx, edx
		jz	short loc_A1A23E
		cmp	[ebp+arg_4], ebx
		jz	short loc_A1A23E
		mov	eax, [ecx+8]
		mov	edi, ebx
		mov	edx, 0C000000Dh
		test	eax, eax
		jnz	short loc_A1A266

loc_A1A25F:				; CODE XREF: sub_A1A21B+4Ej
		mov	esi, edx
		jmp	loc_A1A2E6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A266:				; CODE XREF: sub_A1A21B+42j
		cmp	dword ptr [ecx], 3
		jbe	short loc_A1A25F

loc_A1A26B:				; CODE XREF: sub_A1A21B+82j
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A278
		xor	esi, esi
		jmp	short loc_A1A280
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A278:				; CODE XREF: sub_A1A21B+57j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A280:				; CODE XREF: sub_A1A21B+5Bj
		mov	[ebp+var_8], ecx
		test	esi, esi
		js	short loc_A1A2C4
		lea	eax, [ebp+var_8]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1A2C4
		mov	eax, [ebp+var_8]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A1A26B
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A2AC
		xor	esi, esi
		jmp	short loc_A1A2B4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A2AC:				; CODE XREF: sub_A1A21B+8Bj
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A2B4:				; CODE XREF: sub_A1A21B+8Fj
		test	esi, esi
		js	short loc_A1A2C4
		mov	edi, edx
		mov	eax, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		jmp	short loc_A1A2C6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A2C4:				; CODE XREF: sub_A1A21B+6Aj
					; sub_A1A21B+79j ...
		mov	eax, edi

loc_A1A2C6:				; CODE XREF: sub_A1A21B+A7j
		test	esi, esi
		js	short loc_A1A2E4
		cmp	eax, 8
		jz	short loc_A1A2D9
		mov	esi, 0C0000023h
		jmp	loc_A1A714
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A2D9:				; CODE XREF: sub_A1A21B+B2j
		mov	eax, [edi]
		mov	[ebp+var_28], eax
		mov	eax, [edi+4]
		mov	[ebp+var_2C], eax

loc_A1A2E4:				; CODE XREF: sub_A1A21B+ADj
		xor	ebx, ebx

loc_A1A2E6:				; CODE XREF: sub_A1A21B+46j
		test	esi, esi
		js	loc_A1A714
		mov	edx, [ebp+var_20]
		mov	ecx, ebx
		and	[ebp+var_1C], 0
		mov	edi, ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_10], ecx
		mov	eax, [edx+8]
		test	eax, eax
		jnz	short loc_A1A310

loc_A1A306:				; CODE XREF: sub_A1A21B+F8j
		mov	esi, 0C000000Dh
		jmp	loc_A1A3FB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A310:				; CODE XREF: sub_A1A21B+E9j
		cmp	dword ptr [edx], 4
		jbe	short loc_A1A306
		and	[ebp+var_18], 0

loc_A1A319:				; CODE XREF: sub_A1A21B+13Ej
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A326
		xor	esi, esi
		jmp	short loc_A1A32E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A326:				; CODE XREF: sub_A1A21B+105j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A32E:				; CODE XREF: sub_A1A21B+109j
		mov	[ebp+var_C], ecx
		test	esi, esi
		js	loc_A1A3F8
		lea	eax, [ebp+var_C]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1A3F8
		mov	edx, [ebp+var_18]
		mov	eax, [ebp+var_C]
		inc	edx
		mov	[ebp+var_18], edx
		cmp	edx, 4
		jb	short loc_A1A319
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A368
		xor	esi, esi
		jmp	short loc_A1A370
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A368:				; CODE XREF: sub_A1A21B+147j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A370:				; CODE XREF: sub_A1A21B+14Bj
		test	esi, esi
		js	loc_A1A3F8
		mov	edi, edx
		mov	ebx, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		test	esi, esi
		js	short loc_A1A3F8
		test	ebx, ebx
		jnz	short loc_A1A3BF

loc_A1A38A:				; CODE XREF: sub_A1A21B+1AAj
					; sub_A1A21B+1B7j ...
		mov	esi, 0C000003Eh

loc_A1A38F:				; CODE XREF: sub_A1A21B+212j
		test	esi, esi
		js	loc_A1A714

loc_A1A397:				; CODE XREF: sub_A1A21B+22Bj
		mov	edx, [ebp+var_20]
		xor	ecx, ecx
		and	[ebp+var_C], 0
		xor	edi, edi
		and	[ebp+var_1C], ecx
		xor	ebx, ebx
		mov	[ebp+var_8], ecx
		mov	eax, [edx+8]
		test	eax, eax
		jnz	loc_A1A44B

loc_A1A3B5:				; CODE XREF: sub_A1A21B+233j
		mov	esi, 0C000000Dh
		jmp	loc_A1A557
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A3BF:				; CODE XREF: sub_A1A21B+16Dj
		test	ebx, 1
		jnz	short loc_A1A38A
		mov	eax, ebx
		xor	ecx, ecx
		shr	eax, 1
		cmp	cx, [edi+eax*2-2]
		jnz	short loc_A1A38A
		lea	eax, [ebp+var_1C]
		mov	edx, ebx
		push	eax
		mov	ecx, edi
		call	_StringCbLengthW@12 ; StringCbLengthW(x,x,x)
		test	eax, eax
		js	short loc_A1A38A
		mov	ecx, [ebp+var_1C]
		lea	eax, [ecx+2]
		cmp	eax, ebx
		jnz	short loc_A1A38A
		shr	ecx, 1
		mov	ebx, edi
		mov	[ebp+var_10], ecx
		jmp	short loc_A1A3FE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A3F8:				; CODE XREF: sub_A1A21B+118j
					; sub_A1A21B+12Bj ...
		mov	ecx, [ebp+var_10]

loc_A1A3FB:				; CODE XREF: sub_A1A21B+F0j
		mov	ebx, [ebp+var_8]

loc_A1A3FE:				; CODE XREF: sub_A1A21B+1DBj
		test	esi, esi
		js	loc_A1A714
		lea	esi, ds:2[ecx*2]
		test	esi, esi
		jz	loc_A1A38A
		push	20534C53h
		push	esi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A1A432
		mov	esi, 0C0000017h
		jmp	loc_A1A38F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A432:				; CODE XREF: sub_A1A21B+20Bj
		push	esi		; size_t
		push	ebx		; void *
		push	edi		; void *
		call	_memcpy
		mov	eax, [ebp+var_10]
		add	esp, 0Ch
		mov	[ebp+var_14], edi
		mov	[ebp+var_24], eax
		jmp	loc_A1A397
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A44B:				; CODE XREF: sub_A1A21B+194j
		cmp	dword ptr [edx], 5
		jbe	loc_A1A3B5
		and	[ebp+var_20], ecx

loc_A1A457:				; CODE XREF: sub_A1A21B+27Cj
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A464
		xor	esi, esi
		jmp	short loc_A1A46C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A464:				; CODE XREF: sub_A1A21B+243j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A46C:				; CODE XREF: sub_A1A21B+247j
		mov	[ebp+var_10], ecx
		test	esi, esi
		js	loc_A1A554
		lea	eax, [ebp+var_10]
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1A554
		mov	edx, [ebp+var_20]
		mov	eax, [ebp+var_10]
		inc	edx
		mov	[ebp+var_20], edx
		cmp	edx, 5
		jb	short loc_A1A457
		mov	edx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A4A6
		xor	esi, esi
		jmp	short loc_A1A4AE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A4A6:				; CODE XREF: sub_A1A21B+285j
		mov	esi, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A4AE:				; CODE XREF: sub_A1A21B+289j
		test	esi, esi
		js	loc_A1A554
		mov	edi, edx
		mov	ebx, edx
		neg	edi
		sbb	edi, edi
		and	edi, ecx
		test	esi, esi
		js	loc_A1A554
		test	ebx, ebx
		jnz	short loc_A1A51B

loc_A1A4CC:				; CODE XREF: sub_A1A21B+306j
					; sub_A1A21B+313j ...
		mov	esi, 0C000003Eh

loc_A1A4D1:				; CODE XREF: sub_A1A21B+36Ej
		test	esi, esi
		js	loc_A1A6F0
		mov	ebx, [ebp+var_4]
		mov	eax, ebx

loc_A1A4DE:				; CODE XREF: sub_A1A21B+386j
		mov	esi, [ebp+var_14]
		lea	eax, ds:2[eax*2]
		push	ebx
		push	eax
		mov	eax, [ebp+var_24]
		push	esi
		lea	eax, ds:2[eax*2]
		push	eax
		call	ds:dword_A93EE8
		mov	edi, eax
		test	edi, edi
		js	loc_A1A5B7
		mov	eax, ds:dword_A93EB8
		test	eax, eax
		jz	loc_A1A5A6
		push	esi
		call	eax
		jmp	loc_A1A5AB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A51B:				; CODE XREF: sub_A1A21B+2AFj
		test	ebx, 1
		jnz	short loc_A1A4CC
		mov	eax, ebx
		xor	ecx, ecx
		shr	eax, 1
		cmp	cx, [edi+eax*2-2]
		jnz	short loc_A1A4CC
		lea	eax, [ebp+var_1C]
		mov	edx, ebx
		push	eax
		mov	ecx, edi
		call	_StringCbLengthW@12 ; StringCbLengthW(x,x,x)
		test	eax, eax
		js	short loc_A1A4CC
		mov	ecx, [ebp+var_1C]
		lea	eax, [ecx+2]
		cmp	eax, ebx
		jnz	short loc_A1A4CC
		shr	ecx, 1
		mov	ebx, edi
		mov	[ebp+var_8], ecx
		jmp	short loc_A1A55A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A554:				; CODE XREF: sub_A1A21B+256j
					; sub_A1A21B+269j ...
		mov	ecx, [ebp+var_8]

loc_A1A557:				; CODE XREF: sub_A1A21B+19Fj
		mov	ebx, [ebp+var_C]

loc_A1A55A:				; CODE XREF: sub_A1A21B+337j
		test	esi, esi
		js	loc_A1A6F0
		lea	esi, ds:2[ecx*2]
		test	esi, esi
		jz	loc_A1A4CC
		push	20534C53h
		push	esi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A1A58E
		mov	esi, 0C0000017h
		jmp	loc_A1A4D1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A58E:				; CODE XREF: sub_A1A21B+367j
		push	esi		; size_t
		push	ebx		; void *
		push	edi		; void *
		call	_memcpy
		mov	eax, [ebp+var_8]
		add	esp, 0Ch
		mov	ebx, edi
		mov	[ebp+var_4], edi
		jmp	loc_A1A4DE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A5A6:				; CODE XREF: sub_A1A21B+2F2j
		mov	eax, 0C00000BBh

loc_A1A5AB:				; CODE XREF: sub_A1A21B+2FBj
		lea	edi, [eax+3FFFFD8Eh]
		neg	edi
		sbb	edi, edi
		and	edi, eax

loc_A1A5B7:				; CODE XREF: sub_A1A21B+2E5j
		and	[ebp+var_8], 0
		lea	eax, [ebp+var_8]
		xor	ecx, ecx
		push	eax
		push	8
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1A6F3
		mov	ecx, [ebp+var_8]
		lea	eax, [ebp+var_8]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	loc_A1A6F3
		mov	esi, [ebp+arg_4]
		mov	eax, [ebp+var_8]
		lea	ebx, [esi+4]
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A1A605
		mov	esi, 0C000003Eh
		jmp	loc_A1A6F0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A605:				; CODE XREF: sub_A1A21B+3DEj
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A1A622
		mov	esi, 0C0000017h
		jmp	loc_A1A6F0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A622:				; CODE XREF: sub_A1A21B+3FBj
		mov	[esi+8], edx
		and	dword ptr [esi], 0
		or	edi, 10000000h
		lea	esi, [edx+4]
		cmp	esi, edx
		jb	loc_A1A6EB
		mov	ecx, [ebx]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		jbe	short loc_A1A64E

loc_A1A644:				; CODE XREF: sub_A1A21B+4B2j
		mov	esi, 0C0000023h
		jmp	loc_A1A6F0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A64E:				; CODE XREF: sub_A1A21B+427j
		mov	dword ptr [edx], 4
		mov	[esi], edi
		mov	edi, [ebp+arg_4]
		inc	dword ptr [edi]
		mov	ecx, [edi]
		mov	[ebp+var_30], ecx
		mov	eax, [edi+8]
		mov	[ebp+var_20], eax
		test	eax, eax
		jnz	short loc_A1A681
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1A6F0
		inc	dword ptr [edi]
		xor	esi, esi
		jmp	short loc_A1A6F0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A681:				; CODE XREF: sub_A1A21B+44Dj
		and	[ebp+var_24], 0
		mov	edi, eax
		mov	[ebp+var_10], edi
		test	ecx, ecx
		jz	short loc_A1A6BB

loc_A1A68E:				; CODE XREF: sub_A1A21B+49Bj
		mov	edx, [edi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A1A6EB
		lea	eax, [ebp+var_10]
		mov	ecx, edi
		push	eax
		call	RtlUIntAdd
		mov	esi, eax
		test	esi, esi
		js	short loc_A1A6F0
		mov	ecx, [ebp+var_24]
		mov	edi, [ebp+var_10]
		inc	ecx
		mov	[ebp+var_24], ecx
		cmp	ecx, [ebp+var_30]
		jb	short loc_A1A68E
		mov	eax, [ebp+var_20]

loc_A1A6BB:				; CODE XREF: sub_A1A21B+471j
		lea	edx, [edi+4]
		cmp	edx, edi
		jb	short loc_A1A6EB
		mov	ecx, [ebx]
		xor	esi, esi
		add	ecx, eax
		lea	eax, [edi+0Ch]
		cmp	eax, ecx
		ja	loc_A1A644
		mov	eax, [ebp+var_28]
		mov	dword ptr [edi], 8
		mov	[edx], eax
		mov	eax, [ebp+var_2C]
		mov	[edx+4], eax
		mov	eax, [ebp+arg_4]
		inc	dword ptr [eax]
		jmp	short loc_A1A6F0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A6EB:				; CODE XREF: sub_A1A21B+418j
					; sub_A1A21B+47Bj ...
		mov	esi, 0C0000095h

loc_A1A6F0:				; CODE XREF: sub_A1A21B+2B8j
					; sub_A1A21B+341j ...
		mov	ebx, [ebp+var_4]

loc_A1A6F3:				; CODE XREF: sub_A1A21B+3B2j
					; sub_A1A21B+3CBj
		mov	eax, [ebp+var_14]
		test	eax, eax
		jz	short loc_A1A705
		push	20534C53h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1A705:				; CODE XREF: sub_A1A21B+4DDj
		test	ebx, ebx
		jz	short loc_A1A714
		push	20534C53h
		push	ebx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1A714:				; CODE XREF: sub_A1A21B+28j
					; sub_A1A21B+B9j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1A21B	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1A71D	proc near		; CODE XREF: sub_785212+14CBp

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		and	[ebp+var_10], 0
		mov	eax, edx
		and	[ebp+var_14], 0
		and	[ebp+var_8], 0
		mov	[ebp+var_24], eax
		push	ebx
		push	esi
		push	edi
		test	ecx, ecx
		jnz	short loc_A1A747

loc_A1A73D:				; CODE XREF: sub_A1A71D+2Cj
					; sub_A1A71D+33j
		mov	edx, 0C000000Dh
		jmp	loc_A1AA61
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A747:				; CODE XREF: sub_A1A71D+1Ej
		test	eax, eax
		jz	short loc_A1A73D
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jz	short loc_A1A73D
		mov	eax, [ecx+8]
		xor	esi, esi
		and	[ebp+var_4], esi
		test	eax, eax
		jnz	short loc_A1A768

loc_A1A75E:				; CODE XREF: sub_A1A71D+4Ej
		mov	edx, 0C000000Dh
		jmp	loc_A1A7F3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A768:				; CODE XREF: sub_A1A71D+3Fj
		cmp	dword ptr [ecx], 3
		jbe	short loc_A1A75E
		xor	ebx, ebx

loc_A1A76F:				; CODE XREF: sub_A1A71D+8Aj
		mov	ecx, [eax]
		mov	[ebp+var_1C], ecx
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A77F
		xor	edx, edx
		jmp	short loc_A1A787
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A77F:				; CODE XREF: sub_A1A71D+5Cj
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A787:				; CODE XREF: sub_A1A71D+60j
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	short loc_A1A7CE
		mov	edx, [ebp+var_1C]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A1A7CE
		mov	eax, [ebp+arg_4]
		inc	ebx
		cmp	ebx, 3
		jb	short loc_A1A76F
		mov	ebx, [eax]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A7B6
		xor	edx, edx
		jmp	short loc_A1A7BE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A7B6:				; CODE XREF: sub_A1A71D+93j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A7BE:				; CODE XREF: sub_A1A71D+97j
		test	edx, edx
		js	short loc_A1A7CE
		mov	esi, ebx
		mov	eax, ebx
		neg	esi
		sbb	esi, esi
		and	esi, ecx
		jmp	short loc_A1A7D1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A7CE:				; CODE XREF: sub_A1A71D+6Fj
					; sub_A1A71D+81j ...
		mov	eax, [ebp+var_4]

loc_A1A7D1:				; CODE XREF: sub_A1A71D+AFj
		test	edx, edx
		js	loc_A1AA61
		cmp	eax, 8
		jz	short loc_A1A7E8

loc_A1A7DE:				; CODE XREF: sub_A1A71D+2A2j
					; sub_A1A71D+323j
		mov	edx, 0C0000023h
		jmp	loc_A1AA61
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A7E8:				; CODE XREF: sub_A1A71D+BFj
		mov	eax, [esi]
		mov	[ebp+var_10], eax
		mov	eax, [esi+4]
		mov	[ebp+var_14], eax

loc_A1A7F3:				; CODE XREF: sub_A1A71D+46j
		test	edx, edx
		js	loc_A1AA61
		or	[ebp+var_1C], 0FFFFFFFFh
		mov	[ebp+var_20], 0FDE9F140h

loc_A1A806:				; CODE XREF: sub_A1A71D+FEj
		lea	eax, [ebp+var_20]
		push	eax
		push	1
		push	1
		call	_KeDelayExecutionThread@12 ; KeDelayExecutionThread(x,x,x)
		mov	esi, eax
		cmp	esi, 101h
		jz	short loc_A1A806
		test	esi, esi
		js	short loc_A1A86F
		mov	ebx, 0C0h
		cmp	esi, ebx
		jz	short loc_A1A86F
		or	[ebp+var_1C], 0FFFFFFFFh
		mov	[ebp+var_20], 0EFE82080h

loc_A1A835:				; CODE XREF: sub_A1A71D+134j
		lea	eax, [ebp+var_20]
		push	eax
		push	1
		push	1
		push	6
		push	offset unk_6B72E0
		call	KeWaitForSingleObject
		mov	esi, eax
		cmp	esi, 101h
		jz	short loc_A1A835
		test	esi, esi
		js	short loc_A1A86F
		cmp	esi, ebx
		jz	short loc_A1A86F
		cmp	esi, 102h
		jz	short loc_A1A86F
		push	0
		push	offset unk_6B72E0
		call	_KeReleaseMutex@8 ; KeReleaseMutex(x,x)

loc_A1A86F:				; CODE XREF: sub_A1A71D+102j
					; sub_A1A71D+10Bj ...
		push	8
		pop	ecx
		mov	[ebp+arg_4], ecx
		lea	eax, [ebp+arg_4]
		push	eax
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A1A88F
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_8], eax
		jmp	short loc_A1A892
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A88F:				; CODE XREF: sub_A1A71D+168j
		mov	eax, [ebp+var_8]

loc_A1A892:				; CODE XREF: sub_A1A71D+170j
		test	edx, edx
		js	loc_A1AA61
		xor	ebx, ebx
		mov	[ebp+var_C], 8
		lea	ecx, [ebp+var_C]
		mov	edx, eax
		push	ecx
		push	8
		pop	ecx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A1AA61
		mov	eax, [ebp+var_C]
		lea	ecx, [eax+7]
		and	ecx, 0FFFFFFF8h
		cmp	ecx, eax
		jnb	short loc_A1A8CF
		mov	edx, 0C0000095h
		jmp	short loc_A1A8DC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A8CF:				; CODE XREF: sub_A1A71D+1A9j
		lea	ebx, [ecx+8]
		cmp	ebx, ecx
		jb	loc_A1A95F
		xor	edx, edx

loc_A1A8DC:				; CODE XREF: sub_A1A71D+1B0j
		test	edx, edx
		js	loc_A1AA61
		mov	ecx, [ebp+var_24]
		mov	edx, ebx
		push	4
		mov	eax, [ecx+10h]
		mov	[ebp+var_1C], eax
		mov	eax, [ecx+8]
		mov	[ebp+var_24], eax
		lea	eax, [ebp+arg_4]
		pop	ecx
		push	eax
		mov	[ebp+arg_4], ecx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A1AA61
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A91C
		xor	edx, edx
		jmp	short loc_A1A924
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A91C:				; CODE XREF: sub_A1A71D+1F9j
		mov	edx, 0C0000095h
		or	ecx, 0FFFFFFFFh

loc_A1A924:				; CODE XREF: sub_A1A71D+1FDj
		mov	[ebp+arg_4], ecx
		test	edx, edx
		js	loc_A1AA61
		mov	edx, [ebp+var_24]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	loc_A1AA61
		mov	eax, [ebp+arg_4]
		lea	ecx, [eax+4]
		cmp	ecx, eax
		jb	short loc_A1A95F
		mov	edx, [ebp+var_1C]
		lea	eax, [ebp+arg_4]
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		jmp	short loc_A1A964
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A95F:				; CODE XREF: sub_A1A71D+1B7j
					; sub_A1A71D+230j
		mov	edx, 0C0000095h

loc_A1A964:				; CODE XREF: sub_A1A71D+240j
		test	edx, edx
		js	loc_A1AA61
		mov	eax, [ebp+var_8]
		lea	ebx, [edi+4]
		mov	[ebx], eax
		test	eax, eax
		jnz	short loc_A1A982
		mov	edx, 0C000003Eh
		jmp	loc_A1AA61
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A982:				; CODE XREF: sub_A1A71D+259j
		push	20534C53h
		push	eax
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A1A99F
		mov	edx, 0C0000017h
		jmp	loc_A1AA61
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A99F:				; CODE XREF: sub_A1A71D+276j
		mov	[edi+8], edx
		and	dword ptr [edi], 0
		or	esi, 10000000h
		lea	eax, [edx+4]
		cmp	eax, edx
		jb	loc_A1AA5C
		mov	ecx, [ebx]
		lea	eax, [edx+8]
		add	ecx, edx
		cmp	eax, ecx
		ja	loc_A1A7DE
		mov	dword ptr [edx], 4
		mov	[edx+4], esi
		inc	dword ptr [edi]
		mov	ecx, [edi]
		mov	[ebp+var_24], ecx
		mov	eax, [edi+8]
		mov	[ebp+var_1C], eax
		test	eax, eax
		jnz	short loc_A1A9F6
		mov	ecx, [ebx]
		push	ebx
		push	0Ch
		pop	edx
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A1AA61
		inc	dword ptr [edi]
		xor	edx, edx
		jmp	short loc_A1AA61
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1A9F6:				; CODE XREF: sub_A1A71D+2C0j
		and	[ebp+var_8], 0
		mov	esi, eax
		mov	[ebp+arg_4], esi
		test	ecx, ecx
		jz	short loc_A1AA2D

loc_A1AA03:				; CODE XREF: sub_A1A71D+30Ej
		mov	edx, [esi]
		add	edx, 4
		cmp	edx, 4
		jb	short loc_A1AA5C
		lea	eax, [ebp+arg_4]
		mov	ecx, esi
		push	eax
		call	RtlUIntAdd
		mov	edx, eax
		test	edx, edx
		js	short loc_A1AA61
		mov	ecx, [ebp+var_8]
		mov	esi, [ebp+arg_4]
		inc	ecx
		mov	[ebp+var_8], ecx
		cmp	ecx, [ebp+var_24]
		jb	short loc_A1AA03

loc_A1AA2D:				; CODE XREF: sub_A1A71D+2E4j
		lea	eax, [esi+4]
		cmp	eax, esi
		jb	short loc_A1AA5C
		mov	ecx, [ebx]
		lea	eax, [esi+0Ch]
		add	ecx, [ebp+var_1C]
		xor	edx, edx
		cmp	eax, ecx
		ja	loc_A1A7DE
		mov	eax, [ebp+var_10]
		mov	dword ptr [esi], 8
		mov	[esi+4], eax
		mov	eax, [ebp+var_14]
		mov	[esi+8], eax
		inc	dword ptr [edi]
		jmp	short loc_A1AA61
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AA5C:				; CODE XREF: sub_A1A71D+293j
					; sub_A1A71D+2EEj ...
		mov	edx, 0C0000095h

loc_A1AA61:				; CODE XREF: sub_A1A71D+25j
					; sub_A1A71D+B6j ...
		pop	edi
		pop	esi
		mov	eax, edx
		pop	ebx
		leave
		retn	8
sub_A1A71D	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1AA6A	proc near		; CODE XREF: WarbirdKmDecryptPointer+EEp
					; WarbirdKmDecryptPointer+11Bp	...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_8]
		xor	edx, edx
		push	ebx
		push	esi
		push	edi
		push	3
		pop	ebx
		push	0Fh
		pop	ecx
		div	ecx
		mov	eax, [ebp+arg_4]
		mov	edi, [ebp+arg_0]
		mov	esi, [ebp+arg_18]
		and	edi, ebx
		lea	ecx, [edx+1]
		xor	edx, edx
		div	ebx
		lea	eax, [edi+1]
		ror	esi, cl
		mov	ecx, [ebp+arg_14]
		add	eax, edx
		and	eax, ebx
		movzx	eax, word ptr [ecx+eax*2]
		xor	eax, [ebp+arg_18]
		movzx	ecx, word ptr [ecx+edi*2]
		imul	eax, ecx
		pop	edi
		sub	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	1Ch
sub_A1AA6A	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1AAB4	proc near		; CODE XREF: PAGE:007812CAp

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	20h
		push	offset dword_6AAAD8
		call	__SEH_prolog4
		mov	edi, edx
		mov	ebx, ecx
		mov	[ebp+var_24], ebx
		xor	edx, edx
		mov	[ebp+var_1C], edx
		mov	[ebp+var_20], edx
		test	ebx, ebx
		jz	short loc_A1AB48
		mov	[ebp+ms_exc.disabled], edx
		cmp	edi, 8
		jnb	short loc_A1AAEF
		mov	esi, 0C000000Dh

loc_A1AAE0:				; CODE XREF: sub_A1AAB4+92j
		mov	[ebp+var_28], esi

loc_A1AAE3:				; CODE XREF: sub_A1AAB4+5Ej
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	loc_A1AC11
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AAEF:				; CODE XREF: sub_A1AAB4+25j
		lea	ecx, [ebx+edi]
		mov	eax, ds:_MmUserProbeAddress
		cmp	ecx, eax
		ja	short loc_A1AAFF
		cmp	ecx, ebx
		jnb	short loc_A1AB01

loc_A1AAFF:				; CODE XREF: sub_A1AAB4+45j
		mov	[eax], dl

loc_A1AB01:				; CODE XREF: sub_A1AAB4+49j
		lea	edx, [ebp+var_20]
		mov	ecx, edi
		call	sub_A1ACD8
		mov	esi, eax
		mov	[ebp+var_28], esi
		test	esi, esi
		js	short loc_A1AAE3
		push	edi		; size_t
		push	ebx		; void *
		mov	esi, [ebp+var_20]
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	eax, [esi]
		mov	[ebp+var_2C], eax
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A1AB4E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AB30:				; DATA XREF: .text:006AAAECo
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_30], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AB40:				; DATA XREF: .text:006AAAF0o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_30]
		jmp	short loc_A1AAE0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AB48:				; CODE XREF: sub_A1AAB4+1Dj
		push	4
		pop	eax
		mov	[ebp+var_2C], eax

loc_A1AB4E:				; CODE XREF: sub_A1AAB4+7Aj
		xor	ebx, ebx
		cmp	eax, 7
		setnz	bl
		mov	eax, large fs:124h
		mov	eax, [eax+80h]
		lea	ecx, [ebp+var_1C]
		push	ecx
		push	eax
		call	_PsGetProcessId@4 ; PsGetProcessId(x)
		mov	edx, ebx
		mov	ecx, eax
		call	sub_A1B500
		mov	esi, eax
		test	esi, esi
		js	loc_A1AC11
		mov	eax, [ebp+var_2C]
		dec	eax
		cmp	eax, 8		; switch 9 cases
		ja	loc_A1AC0C	; default
		jmp	ds:off_A1AC34[eax*4] ; switch jump

loc_A1AB93:				; DATA XREF: PAGE:off_A1AC34o
		push	edi		; case 0x7
		mov	edx, [ebp+var_20]
		mov	ecx, [ebp+var_1C]
		call	sub_A1B731

loc_A1AB9F:				; CODE XREF: sub_A1AAB4+FBj
					; sub_A1AAB4+109j ...
		mov	esi, eax
		jmp	short loc_A1AC11
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ABA3:				; CODE XREF: sub_A1AAB4+D8j
					; DATA XREF: PAGE:off_A1AC34o
		push	edi		; case 0x8
		mov	edx, [ebp+var_20]
		mov	ecx, [ebp+var_1C]
		call	sub_A1B649
		jmp	short loc_A1AB9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ABB1:				; CODE XREF: sub_A1AAB4+D8j
					; DATA XREF: PAGE:off_A1AC34o
		push	edi		; case 0x0
		mov	edx, [ebp+var_20]
		mov	ecx, [ebp+var_1C]
		call	sub_A1BA08
		jmp	short loc_A1AB9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ABBF:				; CODE XREF: sub_A1AAB4+D8j
					; DATA XREF: PAGE:off_A1AC34o
		push	edi		; case 0x1
		mov	edx, [ebp+var_20]
		mov	ecx, [ebp+var_1C]
		call	sub_A1C4CE
		jmp	short loc_A1AB9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ABCD:				; CODE XREF: sub_A1AAB4+D8j
					; DATA XREF: PAGE:off_A1AC34o
		push	edi		; case 0x2
		push	[ebp+var_24]	; int
		mov	edx, [ebp+var_20]
		mov	ecx, [ebp+var_1C]
		call	sub_A1D36F
		jmp	short loc_A1AB9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ABDE:				; CODE XREF: sub_A1AAB4+D8j
					; DATA XREF: PAGE:off_A1AC34o
		cmp	[ebp+var_20], 0	; case 0x3
		jnz	short loc_A1AC0C ; default
		mov	ecx, [ebp+var_1C]
		call	sub_A1D4C6
		jmp	short loc_A1AB9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ABEE:				; CODE XREF: sub_A1AAB4+D8j
					; DATA XREF: PAGE:off_A1AC34o
		mov	esi, [ebp+var_24] ; case 0x4
		neg	esi
		sbb	esi, esi
		and	esi, 0FFFFFFF5h
		add	esi, 0C000000Dh
		jmp	short loc_A1AC11
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AC00:				; CODE XREF: sub_A1AAB4+D8j
					; DATA XREF: PAGE:off_A1AC34o
		mov	ecx, [ebp+var_1C] ; case 0x6
		mov	ecx, [ecx]
		call	WbRemoveWarbirdProcess
		jmp	short loc_A1AB9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AC0C:				; CODE XREF: sub_A1AAB4+D2j
					; sub_A1AAB4+12Ej
		mov	esi, 0C000000Dh	; default

loc_A1AC11:				; CODE XREF: sub_A1AAB4+36j
					; sub_A1AAB4+C5j ...
		mov	ecx, [ebp+var_1C]
		call	sub_A1B39D
		mov	ecx, [ebp+var_20]
		call	sub_A1AD19
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1AAB4	endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		align 4
off_A1AC34	dd offset loc_A1ABB1	; DATA XREF: sub_A1AAB4+D8r
		dd offset loc_A1ABBF	; jump table for switch	statement
		dd offset loc_A1ABCD
		dd offset loc_A1ABDE
		dd offset loc_A1ABEE
		dd offset loc_A1ABEE
		dd offset loc_A1AC00
		dd offset loc_A1AB93
		dd offset loc_A1ABA3

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __fastcall sub_A1AC58(int,void *,void *,int,int,int,int,int,int)
sub_A1AC58	proc near		; CODE XREF: sub_A1BBB6+E8p
					; sub_A1BD0C+121p ...

var_B4		= dword	ptr -0B4h
var_B0		= dword	ptr -0B0h
var_AC		= dword	ptr -0ACh
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_18		= dword	ptr  20h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 0B4h
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+0B4h+var_4], eax
		push	ebx
		push	esi
		mov	esi, [ebp+arg_10]
		mov	eax, ecx
		mov	ecx, [ebp+arg_18]
		test	eax, eax
		mov	eax, [ebp+arg_8]
		mov	ebx, [ebp+arg_0]
		push	edi
		push	28h
		mov	[esp+0C4h+var_B4], ecx
		lea	edi, [esp+0C4h+var_AC]
		pop	ecx
		push	[esp+0C0h+var_B4] ; int
		mov	[esp+0C4h+var_B0], (offset loc_404E87+1)
		push	[ebp+arg_C]	; int
		rep movsd
		push	dword ptr [eax+4] ; int
		lea	ecx, [esp+0CCh+var_B0]
		push	dword ptr [eax]	; int
		push	[ebp+arg_4]	; int
		push	ebx		; void *
		push	edx		; void *
		jz	short loc_A1ACBA
		call	sub_694E72
		jmp	short loc_A1ACBF ; void	*
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ACBA:				; CODE XREF: sub_A1AC58+59j
		call	sub_694B86

loc_A1ACBF:				; CODE XREF: sub_A1AC58+60j
		mov	ecx, [esp+0C0h+var_4]
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn	1Ch
sub_A1AC58	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1ACD8	proc near		; CODE XREF: sub_A1AAB4+52p
					; sub_A1AD6F+6Ep ...
		mov	edi, edi
		push	ebx
		push	esi
		xor	esi, esi
		mov	ebx, 42524157h
		mov	eax, esi
		push	edi
		mov	edi, edx
		test	ecx, ecx
		jz	short loc_A1AD00
		push	ebx
		push	ecx
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		test	eax, eax
		jnz	short loc_A1AD00
		mov	esi, 0C0000017h
		jmp	short loc_A1AD13
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AD00:				; CODE XREF: sub_A1ACD8+12j
					; sub_A1ACD8+1Fj
		test	edi, edi
		jz	short loc_A1AD08
		mov	[edi], eax
		mov	eax, esi

loc_A1AD08:				; CODE XREF: sub_A1ACD8+2Aj
		test	eax, eax
		jz	short loc_A1AD13
		push	ebx
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1AD13:				; CODE XREF: sub_A1ACD8+26j
					; sub_A1ACD8+32j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_A1ACD8	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1AD19	proc near		; CODE XREF: sub_A1AAB4+168p
		test	ecx, ecx
		jz	short locret_A1AD28
		push	42524157h
		push	ecx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

locret_A1AD28:				; CODE XREF: sub_A1AD19+2j
		retn
sub_A1AD19	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1AD29	proc near		; CODE XREF: sub_A1D36F+A9p
		mov	edi, edi
		push	ecx
		push	esi
		push	edi
		mov	esi, ecx
		mov	edi, edx
		mov	ecx, large fs:124h
		push	1
		push	1
		lea	edx, [esi+20h]
		push	0
		mov	dword ptr [edx], 10001h
		call	PspGetContextThreadInternal
		test	eax, eax
		js	short loc_A1AD6B
		mov	ecx, [esi+0D8h]
		mov	[edi+4], ecx
		mov	ecx, [esi+0E4h]
		mov	[edi], ecx
		mov	ecx, [esi+0E0h]
		mov	[edi+8], ecx

loc_A1AD6B:				; CODE XREF: sub_A1AD29+26j
		pop	edi
		pop	esi
		pop	ecx
		retn
sub_A1AD29	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1AD6F	proc near		; CODE XREF: sub_A1B127+31p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		xor	eax, eax
		mov	ebx, ecx
		mov	ecx, dword_6D6BE0
		mov	[ebp+var_8], eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_4], eax
		mov	[ebp+var_10], eax
		push	esi
		push	edi
		mov	edi, edx
		test	ecx, ecx
		jnz	short loc_A1ADA0
		mov	esi, 0C000000Dh
		jmp	loc_A1AE48
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ADA0:				; CODE XREF: sub_A1AD6F+25j
		sub	esp, 0Ch
		lea	edx, [ebp+var_8]
		push	eax
		push	eax
		call	_BCryptCreateHash@28 ; BCryptCreateHash(x,x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	loc_A1AE3C
		push	ecx
		lea	eax, [ebp+var_10]
		mov	edx, (offset loc_8C215F+1)
		push	eax
		push	ecx
		mov	ecx, dword_6D6BE0
		lea	eax, [ebp+var_4]
		push	eax
		call	_BCryptGetProperty@24 ;	BCryptGetProperty(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A1AE3C
		mov	ecx, [ebp+var_4]
		lea	edx, [ebp+var_C]
		call	sub_A1ACD8
		mov	esi, eax
		test	esi, esi
		js	short loc_A1AE2A
		push	ecx
		mov	ecx, [ebp+var_8]
		mov	edx, ebx
		push	edi
		call	_BCryptHashData@16 ; BCryptHashData(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A1AE2A
		mov	edi, [ebp+var_C]
		mov	edx, edi
		push	ecx
		push	[ebp+var_4]
		mov	ecx, [ebp+var_8]
		call	_BCryptFinishHash@16 ; BCryptFinishHash(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A1AE2D
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1AE1C
		mov	[eax], edi
		xor	edi, edi

loc_A1AE1C:				; CODE XREF: sub_A1AD6F+A7j
		mov	ecx, [ebp+arg_4]
		test	ecx, ecx
		jz	short loc_A1AE2D
		mov	eax, [ebp+var_4]
		mov	[ecx], eax
		jmp	short loc_A1AE2D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AE2A:				; CODE XREF: sub_A1AD6F+77j
					; sub_A1AD6F+89j
		mov	edi, [ebp+var_C]

loc_A1AE2D:				; CODE XREF: sub_A1AD6F+A0j
					; sub_A1AD6F+B2j ...
		test	edi, edi
		jz	short loc_A1AE3C
		push	42524157h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1AE3C:				; CODE XREF: sub_A1AD6F+42j
					; sub_A1AD6F+66j ...
		mov	ecx, [ebp+var_8]
		test	ecx, ecx
		jz	short loc_A1AE48
		call	_BCryptDestroyHash@4 ; BCryptDestroyHash(x)

loc_A1AE48:				; CODE XREF: sub_A1AD6F+2Cj
					; sub_A1AD6F+D2j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1AD6F	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1AE51	proc near		; CODE XREF: sub_A1BBB6:loc_A1BC30p
					; sub_A1BD0C:loc_A1BD86p ...

var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	30h
		push	offset dword_6AAB18
		call	__SEH_prolog4
		mov	eax, edx
		mov	[ebp+var_34], eax
		mov	[ebp+var_38], ecx
		xor	esi, esi
		mov	[ebp+var_20], esi
		xor	ebx, ebx
		mov	[ebp+var_24], ebx
		and	[ebp+var_28], ebx
		mov	[ebp+var_30], ecx
		mov	[ebp+var_2C], eax
		lea	eax, [ebp+var_28]
		push	eax
		push	4
		lea	eax, [ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_30]
		push	eax
		push	0FFFFFFFFh
		call	_ZwProtectVirtualMemory@20 ; ZwProtectVirtualMemory(x,x,x,x,x)
		mov	edi, eax
		test	edi, edi
		js	loc_A1AF39
		xor	eax, eax
		mov	[ebp+ms_exc.disabled], eax
		push	eax
		push	eax
		push	eax
		push	[ebp+var_34]
		push	[ebp+var_38]
		call	IoAllocateMdl
		mov	esi, eax
		mov	[ebp+var_20], esi
		test	esi, esi
		jnz	short loc_A1AEC4

loc_A1AEB3:				; CODE XREF: sub_A1AE51+A3j
		mov	edi, 0C0000017h
		mov	[ebp+var_1C], edi
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A1AF39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AEC4:				; CODE XREF: sub_A1AE51+60j
		push	2
		xor	ebx, ebx
		inc	ebx
		push	ebx
		push	esi
		call	_MmProbeAndLockPages@12	; MmProbeAndLockPages(x,x,x)
		mov	[ebp+var_24], ebx
		test	byte ptr [esi+6], 5
		jz	short loc_A1AEDE
		mov	eax, [esi+0Ch]
		jmp	short loc_A1AEEF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AEDE:				; CODE XREF: sub_A1AE51+86j
		push	40000020h
		xor	eax, eax
		push	eax
		push	eax
		push	ebx
		push	eax
		push	esi
		call	MmMapLockedPagesSpecifyCache

loc_A1AEEF:				; CODE XREF: sub_A1AE51+8Bj
		mov	[ebp+var_3C], eax
		test	eax, eax
		jz	short loc_A1AEB3
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	ecx, [ebp+arg_4]
		test	ecx, ecx
		jz	short loc_A1AF06
		mov	[ecx], eax

loc_A1AF06:				; CODE XREF: sub_A1AE51+B1j
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1AF39
		mov	[eax], esi
		xor	esi, esi
		jmp	short loc_A1AF39
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AF13:				; DATA XREF: .text:006AAB2Co
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_40], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AF23:				; DATA XREF: .text:006AAB30o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	edi, [ebp+var_40]
		mov	[ebp+var_1C], edi
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	esi, [ebp+var_20]
		mov	ebx, [ebp+var_24]

loc_A1AF39:				; CODE XREF: sub_A1AE51+40j
					; sub_A1AE51+71j ...
		test	esi, esi
		jz	short loc_A1AF4D
		test	ebx, ebx
		jz	short loc_A1AF47
		push	esi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)

loc_A1AF47:				; CODE XREF: sub_A1AE51+EEj
		push	esi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A1AF4D:				; CODE XREF: sub_A1AE51+EAj
		mov	eax, edi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1AE51	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1AF61	proc near		; CODE XREF: sub_A1BBB6+73p
					; sub_A1BD0C+73p ...

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	20h
		push	offset dword_6AAAF8
		call	__SEH_prolog4
		xor	esi, esi
		mov	[ebp+var_20], esi
		mov	ebx, esi
		mov	[ebp+var_24], ebx
		mov	[ebp+ms_exc.disabled], esi
		push	esi
		push	esi
		push	esi
		push	edx
		push	ecx
		call	IoAllocateMdl
		mov	edi, eax
		mov	[ebp+var_20], edi
		test	edi, edi
		jnz	short loc_A1AF9E

loc_A1AF8D:				; CODE XREF: sub_A1AF61+69j
		mov	esi, 0C0000017h
		mov	[ebp+var_1C], esi
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A1B00F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AF9E:				; CODE XREF: sub_A1AF61+2Aj
		mov	ecx, edi
		call	_MmProbeAndLockPagesPrivate@8 ;	MmProbeAndLockPagesPrivate(x,x)
		xor	ebx, ebx
		inc	ebx
		mov	[ebp+var_24], ebx
		test	byte ptr [edi+6], 5
		jz	short loc_A1AFB6
		mov	eax, [edi+0Ch]
		jmp	short loc_A1AFC5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AFB6:				; CODE XREF: sub_A1AF61+4Ej
		push	40000020h
		push	esi
		push	esi
		push	ebx
		push	esi
		push	edi
		call	MmMapLockedPagesSpecifyCache

loc_A1AFC5:				; CODE XREF: sub_A1AF61+53j
		mov	[ebp+var_28], eax
		test	eax, eax
		jz	short loc_A1AF8D
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	ecx, [ebp+arg_4]
		test	ecx, ecx
		jz	short loc_A1AFDC
		mov	[ecx], eax

loc_A1AFDC:				; CODE XREF: sub_A1AF61+77j
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1B00F
		mov	[eax], edi
		mov	edi, esi
		jmp	short loc_A1B00F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AFE9:				; DATA XREF: .text:006AAB0Co
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_2C], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1AFF9:				; DATA XREF: .text:006AAB10o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_2C]
		mov	[ebp+var_1C], esi
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	edi, [ebp+var_20]
		mov	ebx, [ebp+var_24]

loc_A1B00F:				; CODE XREF: sub_A1AF61+3Bj
					; sub_A1AF61+80j ...
		test	edi, edi
		jz	short loc_A1B023
		test	ebx, ebx
		jz	short loc_A1B01D
		push	edi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)

loc_A1B01D:				; CODE XREF: sub_A1AF61+B4j
		push	edi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A1B023:				; CODE XREF: sub_A1AF61+B0j
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1AF61	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B037	proc near		; CODE XREF: sub_A1CAF1+6Ap
					; sub_A1DBB6+83p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	ebx, ecx
		mov	[ebp+var_8], edx
		mov	ecx, edi
		lea	edx, [ebp+var_4]
		call	sub_A1ACD8
		mov	esi, [ebp+var_4]
		mov	[ebp+arg_0], eax
		test	eax, eax
		js	short loc_A1B094
		test	ebx, ebx
		jz	short loc_A1B089
		mov	eax, [ebp+var_8]
		test	eax, eax
		jz	short loc_A1B07E
		cmp	edi, eax
		jb	short loc_A1B073
		mov	edi, eax

loc_A1B073:				; CODE XREF: sub_A1B037+38j
		push	edi		; size_t
		push	ebx		; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch

loc_A1B07E:				; CODE XREF: sub_A1B037+34j
		push	42524157h
		push	ebx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1B089:				; CODE XREF: sub_A1B037+2Dj
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jz	short loc_A1B094
		mov	[eax], esi
		xor	esi, esi

loc_A1B094:				; CODE XREF: sub_A1B037+29j
					; sub_A1B037+57j
		test	esi, esi
		jz	short loc_A1B0A3
		push	42524157h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1B0A3:				; CODE XREF: sub_A1B037+5Fj
		mov	eax, [ebp+arg_0]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1B037	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1B0AD	proc near		; CODE XREF: sub_A1D36F+109p
					; sub_A1D4C6+4Fp
		mov	eax, large fs:124h
		push	ebx
		push	esi
		push	edi
		dec	word ptr [eax+13Eh]
		mov	ebx, edx
		mov	edi, ecx
		nop
		mov	ecx, large fs:124h
		lea	edx, [edi+20h]
		push	1
		push	1
		push	0
		mov	dword ptr [edi+20h], 10001h
		call	PspGetContextThreadInternal
		mov	esi, eax
		test	esi, esi
		js	short loc_A1B115
		mov	eax, [ebx+4]
		lea	edx, [edi+20h]
		mov	ecx, large fs:124h
		push	3
		mov	[edi+0D8h], eax
		mov	eax, [ebx]
		push	1
		mov	[edi+0E4h], eax
		mov	eax, [ebx+8]
		push	0
		mov	[edi+0E0h], eax
		call	PspSetContextThreadInternal
		mov	esi, eax

loc_A1B115:				; CODE XREF: sub_A1B0AD+35j
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_A1B0AD	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B127	proc near		; CODE XREF: sub_A1C264+10Bp
					; sub_A1CBC6+8Dp ...

var_8		= dword	ptr -8
Source2		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		and	[ebp+Source2], 0
		and	[ebp+var_8], 0
		push	ebx
		mov	ebx, ecx
		push	esi
		test	ebx, ebx
		jnz	short loc_A1B145

loc_A1B13E:				; CODE XREF: sub_A1B127+21j
		mov	esi, 0C000000Dh
		jmp	short loc_A1B198
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B145:				; CODE XREF: sub_A1B127+15j
		cmp	edx, 20h
		jbe	short loc_A1B13E
		lea	eax, [ebp+var_8]
		add	edx, 0FFFFFFE0h
		push	eax
		lea	eax, [ebp+Source2]
		push	eax
		lea	ecx, [ebx+20h]
		call	sub_A1AD6F
		mov	esi, eax
		test	esi, esi
		js	short loc_A1B185
		cmp	[ebp+var_8], 20h
		jz	short loc_A1B170
		mov	esi, 0C000000Dh
		jmp	short loc_A1B185
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B170:				; CODE XREF: sub_A1B127+40j
		push	20h		; Length
		push	[ebp+Source2]	; Source2
		push	ebx		; Source1
		call	_RtlCompareMemory@12 ; RtlCompareMemory(x,x,x)
		cmp	eax, 20h
		jz	short loc_A1B185
		mov	esi, 0C0000428h

loc_A1B185:				; CODE XREF: sub_A1B127+3Aj
					; sub_A1B127+47j ...
		cmp	[ebp+Source2], 0
		jz	short loc_A1B198
		push	42524157h
		push	[ebp+Source2]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1B198:				; CODE XREF: sub_A1B127+1Cj
					; sub_A1B127+62j
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1B127	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B19E	proc near		; CODE XREF: sub_A1BBB6+4Cp
					; sub_A1BD0C+4Cp ...

var_34		= dword	ptr -34h
var_28		= dword	ptr -28h
var_20		= dword	ptr -20h
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	ebx
		push	esi
		push	edi
		push	7
		xor	eax, eax
		lea	edi, [ebp+var_34]
		mov	esi, ecx
		mov	ebx, edx
		pop	ecx
		rep stosd
		lea	edi, [ebp+var_18]
		stosd
		stosd
		stosd
		lea	eax, [ebp+var_4]
		push	eax
		push	0Ch
		lea	eax, [ebp+var_18]
		xor	edi, edi
		push	eax
		push	6
		push	esi
		push	0FFFFFFFFh
		mov	[ebp+var_C], edi
		mov	[ebp+var_4], edi
		call	_ZwQueryVirtualMemory@24 ; ZwQueryVirtualMemory(x,x,x,x,x,x)
		mov	edx, eax
		test	edx, edx
		js	short loc_A1B241
		mov	eax, [ebp+var_10]
		shr	eax, 2
		and	al, 0Fh
		mov	byte ptr [ebp+var_8], al
		mov	eax, dword_6BEA40
		test	eax, eax
		jz	short loc_A1B23C
		push	0Ch
		push	[ebp+var_8]
		call	eax
		test	eax, eax
		jz	short loc_A1B23C
		mov	edx, edi
		cmp	[ebp+arg_0], edx
		jz	short loc_A1B241
		lea	eax, [ebp+var_C]
		push	eax
		push	1Ch
		lea	eax, [ebp+var_34]
		push	eax
		push	edi
		push	esi
		push	0FFFFFFFFh
		call	_ZwQueryVirtualMemory@24 ; ZwQueryVirtualMemory(x,x,x,x,x,x)
		mov	edx, eax
		test	edx, edx
		js	short loc_A1B241
		mov	ecx, [ebp+var_34]
		cmp	esi, ecx
		jb	short loc_A1B235
		add	ecx, [ebp+var_28]
		lea	eax, [esi+ebx]
		cmp	eax, ecx
		ja	short loc_A1B235
		cmp	[ebp+var_20], 20h
		jz	short loc_A1B241

loc_A1B235:				; CODE XREF: sub_A1B19E+85j
					; sub_A1B19E+8Fj
		mov	edx, 0C000000Dh
		jmp	short loc_A1B241
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B23C:				; CODE XREF: sub_A1B19E+53j
					; sub_A1B19E+5Ej
		mov	edx, 0C0000428h

loc_A1B241:				; CODE XREF: sub_A1B19E+3Fj
					; sub_A1B19E+65j ...
		pop	edi
		pop	esi
		mov	eax, edx
		pop	ebx
		leave
		retn	4
sub_A1B19E	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B24A	proc near		; CODE XREF: sub_A1B500+F6p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		push	0FFFFFFFFh
		push	4
		mov	edx, esi
		push	dword ptr [esi]
		push	ecx
		mov	ecx, offset unk_6D6BC0
		call	sub_A1DB7E
		mov	edi, eax
		mov	[ebp+var_8], edi
		test	edi, edi
		js	short loc_A1B29E
		lea	edi, [esi+88h]

loc_A1B279:				; CODE XREF: sub_A1B24A+4Aj
					; sub_A1B24A+4Fj
		mov	esi, [edi]
		mov	ebx, esi
		mov	edx, [edi+4]
		add	ebx, 1
		mov	ecx, edx
		mov	[ebp+var_4], edx
		adc	ecx, 0
		mov	eax, esi
		nop
		lock cmpxchg8b qword ptr [edi]
		cmp	eax, esi
		jnz	short loc_A1B279
		cmp	edx, [ebp+var_4]
		jnz	short loc_A1B279
		mov	edi, [ebp+var_8]

loc_A1B29E:				; CODE XREF: sub_A1B24A+27j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1B24A	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B2A5	proc near		; DATA XREF: sub_8820B8+11o
					; sub_A1B2D2+8Fo

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_0]
		test	ecx, ecx
		jnz	short loc_A1B2BD
		xor	eax, eax
		cmp	[ebp+arg_4], eax
		jz	short loc_A1B2C7
		inc	eax
		xor	edx, edx
		jmp	short loc_A1B2CE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B2BD:				; CODE XREF: sub_A1B2A5+Aj
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jnz	short loc_A1B2CB
		or	eax, 0FFFFFFFFh

loc_A1B2C7:				; CODE XREF: sub_A1B2A5+11j
		mov	edx, eax
		jmp	short loc_A1B2CE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B2CB:				; CODE XREF: sub_A1B2A5+1Dj
		sub	eax, [ecx]
		cdq

loc_A1B2CE:				; CODE XREF: sub_A1B2A5+16j
					; sub_A1B2A5+24j
		pop	ebp
		retn	0Ch
sub_A1B2A5	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B2D2	proc near		; CODE XREF: sub_A1B500+B0p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		mov	ebx, edx
		mov	[ebp+var_8], ecx
		mov	esi, 90h
		lea	edx, [ebp+var_4]
		push	edi
		mov	ecx, esi
		call	sub_A1ACD8
		mov	edi, eax
		test	edi, edi
		js	loc_A1B38C
		push	esi		; size_t
		mov	esi, [ebp+var_4]
		push	0		; int
		push	esi		; void *
		call	_memset
		add	dword ptr [esi+88h], 1
		lea	ecx, [esi+4]
		mov	eax, [ebp+var_8]
		mov	edx, offset sub_A1CB98
		adc	dword ptr [esi+8Ch], 0
		add	esp, 4
		mov	[esi], eax
		mov	dword ptr [esi+20h], 3Ch
		call	sub_88247E
		mov	edi, eax
		test	edi, edi
		js	short loc_A1B38F
		and	dword ptr [esi+2Ch], 0
		lea	eax, [esi+24h]
		push	ecx
		push	ecx
		lea	ecx, [esi+68h]
		mov	[eax+4], eax
		mov	edx, offset sub_A1E19C
		mov	[eax], eax
		call	sub_88247E
		mov	edi, eax
		test	edi, edi
		js	short loc_A1B38F
		push	ecx
		push	ecx
		lea	ecx, [esi+30h]
		mov	edx, offset sub_A1B2A5
		call	sub_88247E
		mov	edi, eax
		test	edi, edi
		js	short loc_A1B38F
		push	ecx
		push	ecx
		lea	ecx, [esi+4Ch]
		mov	edx, offset sub_A1B90A
		call	sub_88247E
		mov	edi, eax
		test	edi, edi
		js	short loc_A1B38F
		mov	[ebx], esi
		xor	esi, esi
		jmp	short loc_A1B38F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B38C:				; CODE XREF: sub_A1B2D2+27j
		mov	esi, [ebp+var_4]

loc_A1B38F:				; CODE XREF: sub_A1B2D2+67j
					; sub_A1B2D2+88j ...
		mov	ecx, esi
		call	sub_A1B39D
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1B2D2	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B39D	proc near		; CODE XREF: WbRemoveWarbirdProcess+17E394p
					; sub_A1AAB4+160p ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		mov	eax, ecx
		xor	esi, esi
		mov	[ebp+var_C], eax
		push	edi
		mov	edi, esi
		test	eax, eax
		jz	short loc_A1B401
		add	eax, 88h
		mov	[ebp+var_4], eax

loc_A1B3BD:				; CODE XREF: sub_A1B39D+48j
					; sub_A1B39D+4Cj
		mov	edx, [eax]
		mov	ebx, edx
		mov	edi, [eax+4]
		sub	ebx, 1
		mov	ecx, edi
		mov	[ebp+var_8], edx
		mov	eax, edx
		sbb	ecx, esi
		mov	edx, edi
		nop
		mov	esi, [ebp+var_4]
		lock cmpxchg8b qword ptr [esi]
		mov	ecx, [ebp+var_8]
		cmp	eax, ecx
		mov	eax, [ebp+var_4]
		push	0
		pop	esi
		jnz	short loc_A1B3BD
		cmp	edx, edi
		jnz	short loc_A1B3BD
		mov	esi, ecx
		add	esi, 0FFFFFFFFh
		mov	ecx, esi
		adc	edi, 0FFFFFFFFh
		or	ecx, edi
		jnz	short loc_A1B401
		mov	ecx, [ebp+var_C]
		call	sub_A1B40A

loc_A1B401:				; CODE XREF: sub_A1B39D+16j
					; sub_A1B39D+5Aj
		mov	edx, edi
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1B39D	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B40A	proc near		; CODE XREF: sub_A1B39D+5Fp

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		test	esi, esi
		jz	loc_A1B4F4
		xor	edi, edi
		lea	ecx, [esi+30h]
		mov	ebx, edi
		cmp	[esi+34h], edi
		jbe	short loc_A1B447

loc_A1B429:				; CODE XREF: sub_A1B40A+36j
		mov	eax, [esi+30h]
		mov	ecx, esi
		mov	edx, [esi+3Ch]
		imul	eax, ebx
		mov	edx, [eax+edx]
		call	sub_A1E4FB
		inc	ebx
		cmp	ebx, [esi+34h]
		jb	short loc_A1B429
		xor	edi, edi
		lea	ecx, [esi+30h]

loc_A1B447:				; CODE XREF: sub_A1B40A+1Dj
		call	sub_A1DCA3
		mov	[ebp+var_4], edi
		cmp	[esi+8], edi
		jbe	short loc_A1B46F

loc_A1B454:				; CODE XREF: sub_A1B40A+61j
		mov	eax, [esi+4]
		mov	ecx, esi
		mov	edx, [esi+10h]
		imul	eax, edi
		mov	edx, [eax+edx]
		call	sub_A1D14F
		inc	edi
		cmp	edi, [esi+8]
		jb	short loc_A1B454
		xor	edi, edi

loc_A1B46F:				; CODE XREF: sub_A1B40A+48j
		lea	ecx, [esi+4]
		call	sub_A1DCA3
		lea	ebx, [esi+24h]

loc_A1B47A:				; CODE XREF: sub_A1B40A+8Ej
		mov	edx, [ebx]
		cmp	[edx+4], ebx
		jnz	short loc_A1B4FB
		mov	eax, [edx]
		cmp	[eax+4], edx
		jnz	short loc_A1B4FB
		mov	[ebx], eax
		mov	[eax+4], ebx
		cmp	edx, ebx
		jz	short loc_A1B49A
		mov	ecx, esi
		call	sub_A1D14F
		jmp	short loc_A1B47A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B49A:				; CODE XREF: sub_A1B40A+85j
		lea	ecx, [esi+4Ch]
		mov	ebx, edi
		cmp	[esi+50h], edi
		jbe	short loc_A1B4C0

loc_A1B4A4:				; CODE XREF: sub_A1B40A+AFj
		mov	eax, [esi+4Ch]
		mov	ecx, [esi+58h]
		imul	eax, ebx
		mov	ecx, [eax+ecx]
		call	sub_A1BED9
		inc	ebx
		cmp	ebx, [esi+50h]
		jb	short loc_A1B4A4
		xor	edi, edi
		lea	ecx, [esi+4Ch]

loc_A1B4C0:				; CODE XREF: sub_A1B40A+98j
		call	sub_A1DCA3
		cmp	[esi+6Ch], edi
		jbe	short loc_A1B4E1

loc_A1B4CA:				; CODE XREF: sub_A1B40A+D5j
		mov	eax, [esi+68h]
		mov	ecx, [esi+74h]
		imul	eax, edi
		mov	ecx, [eax+ecx]
		call	sub_A1E255
		inc	edi
		cmp	edi, [esi+6Ch]
		jb	short loc_A1B4CA

loc_A1B4E1:				; CODE XREF: sub_A1B40A+BEj
		lea	ecx, [esi+68h]
		call	sub_A1DCA3
		push	42524157h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1B4F4:				; CODE XREF: sub_A1B40A+Dj
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B4FB:				; CODE XREF: sub_A1B40A+75j
					; sub_A1B40A+7Cj
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
sub_A1B40A	endp			; AL = character to display


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B500	proc near		; CODE XREF: sub_A1AAB4+BCp

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, large fs:124h
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		mov	[ebp+var_8], edx
		dec	word ptr [eax+13Eh]
		mov	ebx, ecx
		mov	[ebp+var_4], edi
		nop
		push	edi
		xor	edx, edx
		mov	ecx, offset unk_6D6BD8
		call	KeAbPreAcquire
		push	11h
		mov	esi, eax
		mov	edx, offset unk_6D6BD8
		pop	ecx
		xor	eax, eax
		lock cmpxchg [edx], ecx
		test	eax, eax
		jz	short loc_A1B54F
		mov	eax, edx
		mov	edx, esi
		push	eax
		mov	ecx, eax
		call	ExfAcquirePushLockSharedEx

loc_A1B54F:				; CODE XREF: sub_A1B500+41j
		test	esi, esi
		jz	short loc_A1B557
		or	byte ptr [esi+0Eh], 1

loc_A1B557:				; CODE XREF: sub_A1B500+51j
		push	ecx
		lea	edx, [ebp+var_4]
		mov	ecx, ebx
		call	WbFindWarbirdProcess
		push	11h
		mov	esi, eax
		xor	ecx, ecx
		pop	eax
		mov	edx, offset unk_6D6BD8
		lock cmpxchg [edx], ecx
		cmp	eax, 11h
		jz	short loc_A1B583
		mov	ecx, edx
		call	@ExfReleasePushLockShared@4 ; ExfReleasePushLockShared(x)
		mov	edx, offset unk_6D6BD8

loc_A1B583:				; CODE XREF: sub_A1B500+75j
		mov	ecx, edx
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		cmp	esi, 0C0000272h
		jnz	loc_A1B624
		cmp	[ebp+var_8], edi
		jz	loc_A1B636
		lea	edx, [ebp+var_4]
		mov	ecx, ebx
		call	sub_A1B2D2
		mov	esi, eax
		test	esi, esi
		js	short loc_A1B636
		mov	eax, large fs:124h
		dec	word ptr [eax+13Eh]
		nop
		mov	ebx, offset unk_6D6BD8
		xor	edx, edx
		push	edi
		mov	ecx, ebx
		call	KeAbPreAcquire
		mov	esi, eax
		lock bts dword ptr [ebx], 0
		jnb	short loc_A1B5EB
		push	ebx
		mov	edx, esi
		mov	ecx, ebx
		call	ExfAcquirePushLockExclusiveEx

loc_A1B5EB:				; CODE XREF: sub_A1B500+DFj
		test	esi, esi
		jz	short loc_A1B5F3
		or	byte ptr [esi+0Eh], 1

loc_A1B5F3:				; CODE XREF: sub_A1B500+EDj
		mov	ecx, [ebp+var_4]
		call	sub_A1B24A
		mov	esi, eax
		or	eax, 0FFFFFFFFh
		lock xadd [ebx], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1B611
		mov	ecx, ebx
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1B611:				; CODE XREF: sub_A1B500+108j
		mov	ecx, ebx
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)

loc_A1B624:				; CODE XREF: sub_A1B500+9Cj
		test	esi, esi
		js	short loc_A1B636
		mov	ecx, [ebp+arg_0]
		test	ecx, ecx
		jz	short loc_A1B636
		mov	eax, [ebp+var_4]
		mov	[ecx], eax
		jmp	short loc_A1B639
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B636:				; CODE XREF: sub_A1B500+A5j
					; sub_A1B500+B9j ...
		mov	edi, [ebp+var_4]

loc_A1B639:				; CODE XREF: sub_A1B500+134j
		mov	ecx, edi
		call	sub_A1B39D
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1B500	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B649	proc near		; CODE XREF: sub_A1AAB4+F6p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	14h
		push	offset dword_6AAB58
		call	__SEH_prolog4
		mov	esi, edx
		mov	ebx, ecx
		and	[ebp+var_1C], 0
		cmp	[ebp+arg_0], 10h
		jb	loc_A1B706
		cmp	dword ptr [esi], 9
		jnz	loc_A1B706
		cmp	dword ptr [esi+4], 0
		jnz	loc_A1B706
		lea	edx, [ebp+var_1C]
		push	8
		pop	ecx
		call	sub_A1ACD8
		mov	edi, eax
		mov	[ebp+var_20], edi
		test	edi, edi
		js	short loc_A1B70B
		and	[ebp+ms_exc.disabled], 0
		mov	edx, [esi+8]
		lea	ecx, [edx+8]
		mov	eax, ds:_MmUserProbeAddress
		cmp	ecx, eax
		ja	short loc_A1B6A5
		cmp	ecx, edx
		jnb	short loc_A1B6AB

loc_A1B6A5:				; CODE XREF: sub_A1B649+56j
		mov	byte ptr [eax],	0
		mov	edx, [esi+8]

loc_A1B6AB:				; CODE XREF: sub_A1B649+5Aj
		mov	eax, [edx]
		mov	ecx, [ebp+var_1C]
		mov	[ecx], eax
		mov	eax, [edx+4]
		mov	[ecx+4], eax
		cmp	dword ptr [ecx], 0
		jz	short loc_A1B6CE
		mov	edi, 0C000000Dh

loc_A1B6C2:				; CODE XREF: sub_A1B649+BBj
		mov	[ebp+var_20], edi
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A1B70B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B6CE:				; CODE XREF: sub_A1B649+72j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	esi, [ebp+var_1C]
		mov	edx, [esi+4]
		mov	ecx, ebx
		call	_WbHeapExecutionUnloadModule@8 ; WbHeapExecutionUnloadModule(x,x)
		mov	edx, [esi+4]
		mov	ecx, ebx
		call	sub_A1C136
		jmp	short loc_A1B70B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B6EE:				; DATA XREF: .text:006AAB6Co
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_24], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B6FE:				; DATA XREF: .text:006AAB70o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	edi, [ebp+var_24]
		jmp	short loc_A1B6C2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B706:				; CODE XREF: sub_A1B649+18j
					; sub_A1B649+21j ...
		mov	edi, 0C000000Dh

loc_A1B70B:				; CODE XREF: sub_A1B649+43j
					; sub_A1B649+83j ...
		mov	ecx, [ebp+var_1C]
		test	ecx, ecx
		jz	short loc_A1B71D
		push	42524157h
		push	ecx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1B71D:				; CODE XREF: sub_A1B649+C7j
		mov	eax, edi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1B649	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B731	proc near		; CODE XREF: sub_A1AAB4+E6p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	1Ch
		push	offset dword_6AAB38
		call	__SEH_prolog4
		mov	esi, edx
		mov	[ebp+var_24], ecx
		and	[ebp+var_1C], 0
		push	10h
		pop	ecx
		cmp	[ebp+arg_0], ecx
		jb	loc_A1B7E9
		cmp	dword ptr [esi], 8
		jnz	loc_A1B7E9
		cmp	dword ptr [esi+4], 0
		jnz	loc_A1B7E9
		lea	edx, [ebp+var_1C]
		call	sub_A1ACD8
		mov	ebx, eax
		mov	[ebp+var_20], ebx
		test	ebx, ebx
		js	short loc_A1B7EE
		and	[ebp+ms_exc.disabled], 0
		mov	eax, [esi+8]
		lea	edx, [eax+10h]
		mov	ecx, ds:_MmUserProbeAddress
		cmp	edx, ecx
		ja	short loc_A1B78E
		cmp	edx, eax
		jnb	short loc_A1B794

loc_A1B78E:				; CODE XREF: sub_A1B731+57j
		mov	byte ptr [ecx],	0
		mov	eax, [esi+8]

loc_A1B794:				; CODE XREF: sub_A1B731+5Bj
		mov	esi, eax
		mov	eax, [ebp+var_1C]
		mov	edi, eax
		movsd
		movsd
		movsd
		movsd
		cmp	dword ptr [eax], 0
		jz	short loc_A1B7B5
		mov	ebx, 0C000000Dh

loc_A1B7A9:				; CODE XREF: sub_A1B731+B6j
		mov	[ebp+var_20], ebx

loc_A1B7AC:				; CODE XREF: sub_A1B731+8Bj
					; sub_A1B731+9Ej
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A1B7EE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B7B5:				; CODE XREF: sub_A1B731+71j
		mov	ecx, [ebp+var_24]
		cmp	dword ptr [ecx+20h], 0
		jz	short loc_A1B7AC
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+4]
		cmp	eax, 3Ch
		jb	short loc_A1B7CC
		push	3Ch
		pop	eax

loc_A1B7CC:				; CODE XREF: sub_A1B731+96j
		mov	[ecx+20h], eax
		jmp	short loc_A1B7AC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B7D1:				; DATA XREF: .text:006AAB4Co
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_28], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B7E1:				; DATA XREF: .text:006AAB50o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	ebx, [ebp+var_28]
		jmp	short loc_A1B7A9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B7E9:				; CODE XREF: sub_A1B731+1Bj
					; sub_A1B731+24j ...
		mov	ebx, 0C000000Dh

loc_A1B7EE:				; CODE XREF: sub_A1B731+43j
					; sub_A1B731+82j
		mov	eax, [ebp+var_1C]
		test	eax, eax
		jz	short loc_A1B800
		push	42524157h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1B800:				; CODE XREF: sub_A1B731+C2j
		mov	eax, ebx
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1B731	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B814	proc near		; CODE XREF: sub_A1C03B+B4p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	eax, [edx+14h]
		mov	[ebp+var_14], eax
		mov	eax, [edx+18h]
		push	ebx
		mov	[ebp+var_18], eax
		mov	eax, large fs:124h
		push	esi
		push	edi
		mov	edi, ecx
		mov	[ebp+var_10], edx
		xor	ecx, ecx
		mov	[ebp+var_C], edi
		dec	word ptr [eax+13Eh]
		mov	[ebp+var_4], ecx
		mov	[ebp+var_8], ecx
		nop
		lea	ebx, [edi+64h]
		xor	edx, edx
		push	ecx
		mov	ecx, ebx
		call	KeAbPreAcquire
		mov	esi, eax
		lock bts dword ptr [ebx], 0
		jnb	short loc_A1B869
		push	ebx
		mov	edx, esi
		mov	ecx, ebx
		call	ExfAcquirePushLockExclusiveEx

loc_A1B869:				; CODE XREF: sub_A1B814+49j
		test	esi, esi
		jz	short loc_A1B871
		or	byte ptr [esi+0Eh], 1

loc_A1B871:				; CODE XREF: sub_A1B814+57j
		lea	eax, [ebp+var_8]
		mov	ecx, edi
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	edx, [ebp+var_18]
		call	sub_A1BE9B
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A1B8A1
		cmp	[ebp+arg_0], eax
		jz	short loc_A1B8D2
		mov	esi, [ebp+var_4]
		mov	ecx, esi
		call	sub_A1C206
		mov	eax, [ebp+arg_0]
		xor	ecx, ecx
		mov	[eax], esi
		jmp	short loc_A1B8D5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B8A1:				; CODE XREF: sub_A1B814+73j
		cmp	edi, 0C0000272h
		jnz	short loc_A1B8D2
		push	[ebp+var_8]
		mov	esi, [ebp+var_10]
		lea	eax, [ebp+var_18]
		push	8
		push	eax
		push	ecx
		mov	ecx, [ebp+var_C]
		mov	edx, esi
		add	ecx, 4Ch
		call	sub_A1DB7E
		mov	edi, eax
		test	edi, edi
		js	short loc_A1B8D2
		mov	ecx, esi
		call	sub_A1C206
		mov	edi, eax

loc_A1B8D2:				; CODE XREF: sub_A1B814+78j
					; sub_A1B814+93j ...
		mov	ecx, [ebp+var_4]

loc_A1B8D5:				; CODE XREF: sub_A1B814+8Bj
		call	sub_A1B9A1
		or	eax, 0FFFFFFFFh
		lock xadd [ebx], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1B8EE
		mov	ecx, ebx
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1B8EE:				; CODE XREF: sub_A1B814+D1j
		mov	ecx, ebx
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1B814	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B90A	proc near		; DATA XREF: sub_A1B2D2+A4o

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		mov	edi, [ebp+arg_0]
		mov	eax, [esi]
		sub	eax, [edi+18h]
		cdq
		mov	ecx, eax
		or	ecx, edx
		jnz	short loc_A1B92A
		mov	eax, [esi+4]
		sub	eax, [edi+14h]
		cdq

loc_A1B92A:				; CODE XREF: sub_A1B90A+17j
		pop	edi
		pop	esi
		pop	ebp
		retn	0Ch
sub_A1B90A	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B930	proc near		; CODE XREF: sub_A1C03B+9Ep

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		push	40h
		mov	[ebp+var_C], edx
		xor	edi, edi
		mov	[ebp+var_8], ecx
		lea	edx, [ebp+var_4]
		pop	ecx
		mov	[ebp+var_4], edi
		call	sub_A1ACD8
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1B990
		mov	esi, [ebp+var_4]
		push	40h		; size_t
		push	edi		; int
		push	esi		; void *
		call	_memset
		mov	ecx, [ebp+var_8]
		add	esp, 0Ch
		mov	dword ptr [esi], 1
		mov	[esi+4], edi
		mov	[esi+8], edi
		mov	[esi+10h], edi
		mov	[esi+0Ch], edi
		mov	eax, [ecx+4]
		mov	[esi+14h], eax
		mov	eax, [ecx]
		mov	[esi+18h], eax
		mov	eax, [ebp+var_C]
		mov	[esi+1Ch], edi
		mov	[eax], esi
		jmp	short loc_A1B993
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B990:				; CODE XREF: sub_A1B930+25j
		mov	edi, [ebp+var_4]

loc_A1B993:				; CODE XREF: sub_A1B930+5Ej
		mov	ecx, edi
		call	sub_A1B9A1
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn
sub_A1B930	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1B9A1	proc near		; CODE XREF: sub_A1B814:loc_A1B8D5p
					; sub_A1B930+65p ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		mov	eax, ecx
		xor	esi, esi
		mov	[ebp+var_4], eax
		push	edi
		mov	edi, esi
		test	eax, eax
		jz	short loc_A1B9FF
		jmp	short loc_A1B9BE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1B9BB:				; CODE XREF: sub_A1B9A1+42j
					; sub_A1B9A1+46j
		mov	eax, [ebp+var_4]

loc_A1B9BE:				; CODE XREF: sub_A1B9A1+18j
		mov	edx, [eax]
		mov	ebx, edx
		mov	edi, [eax+4]
		sub	ebx, 1
		mov	ecx, edi
		mov	[ebp+var_8], edx
		mov	eax, edx
		sbb	ecx, esi
		mov	edx, edi
		nop
		mov	esi, [ebp+var_4]
		lock cmpxchg8b qword ptr [esi]
		mov	ecx, [ebp+var_8]
		push	0
		pop	esi
		cmp	eax, ecx
		jnz	short loc_A1B9BB
		cmp	edx, edi
		jnz	short loc_A1B9BB
		mov	esi, ecx
		add	esi, 0FFFFFFFFh
		mov	ecx, esi
		adc	edi, 0FFFFFFFFh
		or	ecx, edi
		jnz	short loc_A1B9FF
		mov	ecx, [ebp+var_4]
		call	sub_A1BED9

loc_A1B9FF:				; CODE XREF: sub_A1B9A1+16j
					; sub_A1B9A1+54j
		mov	edx, edi
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1B9A1	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1BA08	proc near		; CODE XREF: sub_A1AAB4+104p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		and	[ebp+var_4], 0
		cmp	[ebp+arg_0], 10h
		push	ebx
		push	esi
		push	edi
		jnb	short loc_A1BA23
		mov	edi, 0C000000Dh
		jmp	short loc_A1BA9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1BA23:				; CODE XREF: sub_A1BA08+12j
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_A1BF12
		mov	edi, eax
		test	edi, edi
		js	short loc_A1BA9F
		mov	eax, large fs:124h
		dec	word ptr [eax+13Eh]
		nop
		mov	ebx, [ebp+var_4]
		xor	edx, edx
		push	0
		lea	esi, [ebx+8]
		mov	ecx, esi
		call	KeAbPreAcquire
		mov	edi, eax
		lock bts dword ptr [esi], 0
		jnb	short loc_A1BA67
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockExclusiveEx

loc_A1BA67:				; CODE XREF: sub_A1BA08+53j
		test	edi, edi
		jz	short loc_A1BA6F
		or	byte ptr [edi+0Eh], 1

loc_A1BA6F:				; CODE XREF: sub_A1BA08+61j
		mov	ecx, ebx
		call	sub_A1BAB0
		mov	edi, eax
		or	eax, 0FFFFFFFFh
		lock xadd [esi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1BA8C
		mov	ecx, esi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1BA8C:				; CODE XREF: sub_A1BA08+7Bj
		mov	ecx, esi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)

loc_A1BA9F:				; CODE XREF: sub_A1BA08+19j
					; sub_A1BA08+2Bj
		mov	ecx, [ebp+var_4]
		call	sub_A1B9A1
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1BA08	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1BAB0	proc near		; CODE XREF: sub_A1BA08+69p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 14h
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		xor	edi, edi
		mov	edx, [esi+30h]
		mov	eax, edx
		mov	ecx, [esi+34h]
		and	eax, ecx
		cmp	eax, 0FFFFFFFFh
		jz	loc_A1BBAB
		add	edx, 1
		mov	[esi+30h], edx
		adc	ecx, edi
		mov	[esi+34h], ecx
		cmp	edx, 1
		jnz	loc_A1BBAB
		test	ecx, ecx
		jnz	loc_A1BBAB
		cmp	[esi+24h], edx
		jz	short loc_A1BB04
		call	sub_597FFE
		cmp	[esi+24h], edi
		jnz	loc_A1BBA4

loc_A1BB04:				; CODE XREF: sub_A1BAB0+44j
		mov	eax, [esi+2Ch]
		mov	ebx, [esi+38h]
		mov	eax, [eax+0F0h]
		mov	[esp+20h+var_8], eax
		cmp	ebx, eax
		jnb	loc_A1BBAD
		mov	eax, [esi+3Ch]
		imul	ecx, ebx, 0Ch
		mov	[esp+20h+var_10], ecx
		mov	ecx, ebx
		shl	ecx, 4
		mov	[esp+20h+var_C], ecx

loc_A1BB2F:				; CODE XREF: sub_A1BAB0+F0j
		cmp	ebx, eax
		sbb	edi, edi
		inc	edi
		cmp	dword ptr [esi+24h], 1
		mov	[esp+20h+var_4], edi
		jnz	short loc_A1BB54
		mov	eax, [esi+2Ch]
		mov	edx, edi
		add	eax, 0F8h
		add	eax, ecx
		mov	ecx, esi
		push	eax
		call	sub_A1BD0C
		jmp	short loc_A1BB78
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1BB54:				; CODE XREF: sub_A1BAB0+8Cj
		call	sub_597FFE
		cmp	dword ptr [esi+24h], 0
		jnz	short loc_A1BBA4
		mov	ecx, [esp+20h+var_10]
		mov	edx, edi
		mov	eax, [esi+2Ch]
		add	ecx, 0F4h
		add	eax, ecx
		mov	ecx, esi
		push	eax
		call	sub_A1BBB6

loc_A1BB78:				; CODE XREF: sub_A1BAB0+A2j
		mov	edi, eax
		test	edi, edi
		js	short loc_A1BBAD
		mov	eax, [esp+20h+var_4]
		add	[esi+3Ch], eax
		inc	dword ptr [esi+38h]
		inc	ebx
		mov	ecx, [esp+20h+var_C]
		add	[esp+20h+var_10], 0Ch
		add	ecx, 10h
		mov	eax, [esi+3Ch]
		mov	[esp+20h+var_C], ecx
		cmp	ebx, [esp+20h+var_8]
		jb	short loc_A1BB2F
		jmp	short loc_A1BBAD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1BBA4:				; CODE XREF: sub_A1BAB0+4Ej
					; sub_A1BAB0+ADj
		mov	edi, 0C000000Dh
		jmp	short loc_A1BBAD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1BBAB:				; CODE XREF: sub_A1BAB0+1Fj
					; sub_A1BAB0+33j ...
		xor	edi, edi

loc_A1BBAD:				; CODE XREF: sub_A1BAB0+66j
					; sub_A1BAB0+CCj ...
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_A1BAB0	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1BBB6	proc near		; CODE XREF: sub_A1BAB0+C3p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= dword	ptr -1
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		xor	ebx, ebx
		mov	[ebp+var_14], edx
		mov	[ebp+var_8], ebx
		mov	eax, ecx
		mov	[ebp+var_C], eax
		mov	[ebp+var_10], ebx
		mov	byte ptr [ebp+var_1], bl
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		test	edx, edx
		jz	short loc_A1BBE4
		test	byte ptr [esi],	1
		jnz	loc_A1BD03

loc_A1BBE4:				; CODE XREF: sub_A1BBB6+23j
		mov	edi, [esi+4]
		mov	ecx, 0FFFFFFFh
		mov	edx, [esi+8]
		and	edi, ecx
		add	edi, [eax+18h]
		and	edx, ecx
		mov	eax, [esi]
		mov	ecx, edi
		shr	eax, 1
		not	eax
		and	eax, 1
		push	eax
		call	sub_A1B19E
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A1BD03
		mov	edx, [esi+8]
		lea	eax, [ebp+var_8]
		push	eax
		and	edx, 0FFFFFFFh
		lea	eax, [ebp+var_10]
		test	byte ptr [esi],	2
		mov	ecx, edi
		push	eax
		jnz	short loc_A1BC30
		call	sub_A1AF61
		jmp	short loc_A1BC35
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1BC30:				; CODE XREF: sub_A1BBB6+71j
		call	sub_A1AE51

loc_A1BC35:				; CODE XREF: sub_A1BBB6+78j
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A1BCF0
		cmp	[ebp+var_14], 0
		jz	short loc_A1BC73
		mov	ebx, [ebp+var_C]
		mov	eax, [esi+8]
		and	eax, 0FFFFFFFh
		push	eax
		mov	edx, [ebx+2Ch]
		push	[ebp+var_8]
		mov	ecx, [ebx+18h]
		push	edi
		mov	eax, [edx+38h]
		mov	edx, [edx+30h]
		sub	eax, ecx
		push	eax
		push	ecx
		mov	ecx, [ebx+20h]
		call	sub_695200
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1BCF0

loc_A1BC73:				; CODE XREF: sub_A1BBB6+8Dj
		mov	ecx, [ebp+var_C]
		lea	eax, [ebp+var_1]
		push	eax		; int
		mov	edx, 0FFFFFFFh
		mov	ecx, [ecx+2Ch]
		push	ecx		; int
		lea	eax, [ecx+50h]
		push	eax		; int
		mov	eax, [esi+4]
		and	eax, edx
		push	eax		; int
		lea	eax, [ecx+48h]
		xor	ecx, ecx	; int
		push	eax		; int
		mov	eax, [esi+8]
		and	eax, edx
		mov	edx, edi	; void *
		push	eax		; int
		push	[ebp+var_8]	; void *
		call	sub_A1AC58
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1BCF0
		cmp	[ebp+var_14], 0
		jz	short loc_A1BCDD
		mov	ebx, [ebp+var_C]
		mov	eax, [esi+8]
		and	eax, 0FFFFFFFh
		push	eax
		mov	edx, [ebx+2Ch]
		mov	ecx, [ebx+18h]
		mov	eax, ecx
		push	[ebp+var_8]
		sub	eax, [edx+38h]
		mov	edx, [edx+30h]
		push	edi
		push	eax
		push	ecx
		mov	ecx, [ebx+20h]
		call	sub_695200
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1BCF0

loc_A1BCDD:				; CODE XREF: sub_A1BBB6+F7j
		mov	eax, [esi+8]
		and	eax, 0FFFFFFFh
		push	eax
		push	edi
		push	0FFFFFFFFh
		call	_ZwFlushInstructionCache@12 ; ZwFlushInstructionCache(x,x,x)
		mov	ebx, eax

loc_A1BCF0:				; CODE XREF: sub_A1BBB6+83j
					; sub_A1BBB6+BBj ...
		mov	esi, [ebp+var_10]
		test	esi, esi
		jz	short loc_A1BD03
		push	esi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)
		push	esi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A1BD03:				; CODE XREF: sub_A1BBB6+28j
					; sub_A1BBB6+55j ...
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	4
sub_A1BBB6	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1BD0C	proc near		; CODE XREF: sub_A1BAB0+9Dp

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= dword	ptr -1
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		xor	ebx, ebx
		mov	[ebp+var_14], edx
		mov	[ebp+var_8], ebx
		mov	eax, ecx
		mov	[ebp+var_C], eax
		mov	[ebp+var_10], ebx
		mov	byte ptr [ebp+var_1], bl
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		test	edx, edx
		jz	short loc_A1BD3A
		test	byte ptr [esi],	1
		jnz	loc_A1BE92

loc_A1BD3A:				; CODE XREF: sub_A1BD0C+23j
		mov	edi, [esi+4]
		mov	ecx, 0FFFFFFFh
		mov	edx, [esi+8]
		and	edi, ecx
		add	edi, [eax+18h]
		and	edx, ecx
		mov	eax, [esi]
		mov	ecx, edi
		shr	eax, 1
		not	eax
		and	eax, 1
		push	eax
		call	sub_A1B19E
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A1BE92
		mov	edx, [esi+8]
		lea	eax, [ebp+var_8]
		push	eax
		and	edx, 0FFFFFFFh
		lea	eax, [ebp+var_10]
		test	byte ptr [esi],	2
		mov	ecx, edi
		push	eax
		jnz	short loc_A1BD86
		call	sub_A1AF61
		jmp	short loc_A1BD8B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1BD86:				; CODE XREF: sub_A1BD0C+71j
		call	sub_A1AE51

loc_A1BD8B:				; CODE XREF: sub_A1BD0C+78j
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A1BE7F
		cmp	[ebp+var_14], 0
		jz	short loc_A1BDCD
		mov	ebx, [ebp+var_C]
		mov	eax, [esi+8]
		and	eax, 0FFFFFFFh
		push	eax
		mov	edx, [ebx+2Ch]
		push	[ebp+var_8]
		mov	ecx, [ebx+18h]
		push	edi
		mov	eax, [edx+38h]
		mov	edx, [edx+30h]
		sub	eax, ecx
		push	eax
		push	ecx
		mov	ecx, [ebx+20h]
		call	sub_695200
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A1BE7F

loc_A1BDCD:				; CODE XREF: sub_A1BD0C+8Dj
		mov	eax, [esi+8]
		mov	ebx, [ebp+var_8]
		and	eax, 0FFFFFFFh
		push	eax		; size_t
		push	edi		; void *
		push	ebx		; void *
		call	_memcpy
		mov	ecx, [esi]
		add	esp, 0Ch
		mov	edx, 0FFFFFFFh
		and	ecx, 2
		jnz	short loc_A1BE00
		mov	eax, [esi+8]
		and	eax, edx
		cmp	eax, 4
		jnb	short loc_A1BE00
		mov	ebx, 0C000000Dh
		jmp	short loc_A1BE7F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1BE00:				; CODE XREF: sub_A1BD0C+E1j
					; sub_A1BD0C+EBj
		test	ecx, ecx
		jnz	short loc_A1BE09
		mov	eax, [esi+0Ch]
		mov	[ebx], eax

loc_A1BE09:				; CODE XREF: sub_A1BD0C+F6j
		mov	ecx, [ebp+var_C]
		lea	eax, [ebp+var_1]
		push	eax		; int
		mov	ecx, [ecx+2Ch]
		push	ecx		; int
		lea	eax, [ecx+50h]
		push	eax		; int
		mov	eax, [esi+4]
		and	eax, edx
		push	eax		; int
		lea	eax, [ecx+48h]
		xor	ecx, ecx	; int
		push	eax		; int
		mov	eax, [esi+8]
		and	eax, edx
		mov	edx, ebx	; void *
		push	eax		; int
		push	ebx		; void *
		call	sub_A1AC58
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1BE7F
		cmp	[ebp+var_14], 0
		jz	short loc_A1BE6C
		mov	ebx, [ebp+var_C]
		mov	eax, [esi+8]
		and	eax, 0FFFFFFFh
		push	eax
		mov	edx, [ebx+2Ch]
		mov	ecx, [ebx+18h]
		mov	eax, ecx
		push	[ebp+var_8]
		sub	eax, [edx+38h]
		mov	edx, [edx+30h]
		push	edi
		push	eax
		push	ecx
		mov	ecx, [ebx+20h]
		call	sub_695200
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1BE7F

loc_A1BE6C:				; CODE XREF: sub_A1BD0C+130j
		mov	eax, [esi+8]
		and	eax, 0FFFFFFFh
		push	eax
		push	edi
		push	0FFFFFFFFh
		call	_ZwFlushInstructionCache@12 ; ZwFlushInstructionCache(x,x,x)
		mov	ebx, eax

loc_A1BE7F:				; CODE XREF: sub_A1BD0C+83j
					; sub_A1BD0C+BBj ...
		mov	esi, [ebp+var_10]
		test	esi, esi
		jz	short loc_A1BE92
		push	esi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)
		push	esi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A1BE92:				; CODE XREF: sub_A1BD0C+28j
					; sub_A1BD0C+55j ...
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	4
sub_A1BD0C	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1BE9B	proc near		; CODE XREF: sub_A1B814+6Ap
					; sub_A1C03B+61p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	[ebp+arg_4]
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	eax
		push	8
		add	ecx, 4Ch
		call	WbFindLookupEntry
		test	eax, eax
		js	short locret_A1BED5
		push	esi
		mov	esi, [ebp+arg_0]
		test	esi, esi
		jz	short loc_A1BED4
		push	edi
		mov	edi, [ebp+var_4]
		mov	ecx, edi
		call	sub_A1C206
		test	eax, eax
		js	short loc_A1BED3
		mov	[esi], edi

loc_A1BED3:				; CODE XREF: sub_A1BE9B+34j
		pop	edi

loc_A1BED4:				; CODE XREF: sub_A1BE9B+25j
		pop	esi

locret_A1BED5:				; CODE XREF: sub_A1BE9B+1Dj
		leave
		retn	8
sub_A1BE9B	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1BED9	proc near		; CODE XREF: sub_A1B40A+A6p
					; sub_A1B9A1+59p
		mov	edi, edi
		push	ecx
		push	esi
		mov	esi, ecx
		push	edi
		test	esi, esi
		jz	short loc_A1BF0C
		mov	eax, [esi+20h]
		mov	edi, 42524157h
		test	eax, eax
		jz	short loc_A1BEF7
		push	edi
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1BEF7:				; CODE XREF: sub_A1BED9+15j
		mov	eax, [esi+2Ch]
		test	eax, eax
		jz	short loc_A1BF05
		push	edi
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1BF05:				; CODE XREF: sub_A1BED9+23j
		push	edi
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1BF0C:				; CODE XREF: sub_A1BED9+9j
		pop	edi
		xor	eax, eax
		pop	esi
		pop	ecx
		retn
sub_A1BED9	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1BF12	proc near		; CODE XREF: sub_A1BA08+22p
					; sub_A1C4CE+22p

var_1C		= dword	ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_8], edx
		mov	edx, [ebp+arg_0]
		lea	edi, [ebp+var_1C]
		stosd
		xor	esi, esi
		and	[ebp+var_10], esi
		mov	ebx, ecx
		mov	ecx, [ebp+var_8]
		and	[ebp+var_C], esi
		stosd
		mov	[ebp+var_4], esi
		stosd
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_A1C7EF
		mov	edi, eax
		test	edi, edi
		js	loc_A1C018
		lea	eax, [ebp+var_4]
		mov	ecx, ebx
		push	eax
		lea	edx, [ebp+var_10]
		call	sub_A1C03B
		mov	edi, eax
		test	edi, edi
		js	loc_A1C015
		mov	esi, [ebp+var_4]
		cmp	dword ptr [esi+0Ch], 0
		jnz	loc_A1C001
		mov	eax, large fs:124h
		dec	word ptr [eax+13Eh]
		nop
		mov	ebx, [ebp+var_4]
		xor	edx, edx
		add	ebx, 8
		push	0
		mov	ecx, ebx
		call	KeAbPreAcquire
		mov	[ebp+arg_0], eax
		lock bts dword ptr [ebx], 0
		jnb	short loc_A1BFAD
		push	ebx
		mov	edx, eax
		mov	ecx, ebx
		call	ExfAcquirePushLockExclusiveEx
		mov	eax, [ebp+arg_0]

loc_A1BFAD:				; CODE XREF: sub_A1BF12+8Cj
		test	eax, eax
		jz	short loc_A1BFB5
		or	byte ptr [eax+0Eh], 1

loc_A1BFB5:				; CODE XREF: sub_A1BF12+9Dj
		cmp	dword ptr [esi+0Ch], 0
		jnz	short loc_A1BFD3
		mov	edx, [ebp+var_4]
		lea	esi, [ebp+var_1C]
		mov	ecx, [ebp+var_8]
		sub	esp, 0Ch	; int
		mov	edi, esp
		movsd
		movsd
		movsd
		call	sub_A1C264
		mov	edi, eax

loc_A1BFD3:				; CODE XREF: sub_A1BF12+A7j
		or	eax, 0FFFFFFFFh
		lock xadd [ebx], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1BFE7
		mov	ecx, ebx
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1BFE7:				; CODE XREF: sub_A1BF12+CCj
		mov	ecx, ebx
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		test	edi, edi
		js	short loc_A1C015
		mov	esi, [ebp+var_4]

loc_A1C001:				; CODE XREF: sub_A1BF12+5Fj
		mov	edi, [esi+10h]
		test	edi, edi
		js	short loc_A1C018
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jz	short loc_A1C018
		mov	[eax], esi
		xor	esi, esi
		jmp	short loc_A1C018
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C015:				; CODE XREF: sub_A1BF12+52j
					; sub_A1BF12+EAj
		mov	esi, [ebp+var_4]

loc_A1C018:				; CODE XREF: sub_A1BF12+3Aj
					; sub_A1BF12+F4j ...
		mov	ecx, esi
		call	sub_A1B9A1
		cmp	[ebp+var_14], 0
		jz	short loc_A1C032
		push	42524157h
		push	[ebp+var_14]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1C032:				; CODE XREF: sub_A1BF12+111j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1BF12	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1C03B	proc near		; CODE XREF: sub_A1BF12+49p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	eax, large fs:124h
		push	ebx
		mov	ebx, ecx
		mov	[ebp+var_C], edx
		xor	ecx, ecx
		dec	word ptr [eax+13Eh]
		push	esi
		push	edi
		mov	[ebp+var_4], ecx
		mov	[ebp+var_8], ecx
		nop
		lea	esi, [ebx+64h]
		xor	edx, edx
		push	ecx
		mov	ecx, esi
		call	KeAbPreAcquire
		push	11h
		mov	edi, eax
		xor	eax, eax
		pop	ecx
		lock cmpxchg [esi], ecx
		test	eax, eax
		jz	short loc_A1C087
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockSharedEx

loc_A1C087:				; CODE XREF: sub_A1C03B+40j
		test	edi, edi
		jz	short loc_A1C08F
		or	byte ptr [edi+0Eh], 1

loc_A1C08F:				; CODE XREF: sub_A1C03B+4Ej
		mov	edx, [ebp+var_C]
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_4]
		mov	ecx, ebx
		push	eax
		call	sub_A1BE9B
		push	11h
		mov	edi, eax
		xor	edx, edx
		pop	eax
		lock cmpxchg [esi], edx
		cmp	eax, 11h
		jz	short loc_A1C0B8
		mov	ecx, esi
		call	@ExfReleasePushLockShared@4 ; ExfReleasePushLockShared(x)

loc_A1C0B8:				; CODE XREF: sub_A1C03B+74j
		mov	ecx, esi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		cmp	edi, 0C0000272h
		jnz	short loc_A1C10C
		mov	ecx, [ebp+var_C]
		lea	edx, [ebp+var_4]
		call	sub_A1B930
		mov	esi, [ebp+var_4]
		mov	edi, eax
		test	edi, edi
		js	short loc_A1C11E
		lea	eax, [ebp+var_8]
		mov	edx, esi
		push	eax
		mov	ecx, ebx
		call	sub_A1B814
		mov	edi, eax
		test	edi, edi
		js	short loc_A1C11E
		cmp	[ebp+var_8], 0
		jz	short loc_A1C113
		mov	ecx, esi
		call	sub_A1B9A1
		mov	esi, [ebp+var_8]
		jmp	short loc_A1C113
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C10C:				; CODE XREF: sub_A1C03B+96j
		mov	esi, [ebp+var_4]
		test	edi, edi
		js	short loc_A1C11E

loc_A1C113:				; CODE XREF: sub_A1C03B+C3j
					; sub_A1C03B+CFj
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1C11E
		mov	[eax], esi
		xor	esi, esi

loc_A1C11E:				; CODE XREF: sub_A1C03B+AAj
					; sub_A1C03B+BDj ...
		mov	ecx, esi
		call	sub_A1B9A1
		mov	ecx, [ebp+var_8]
		call	sub_A1B9A1
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1C03B	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1C136	proc near		; CODE XREF: sub_A1B649+9Ep

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, large fs:124h
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		dec	word ptr [eax+13Eh]
		mov	ebx, ecx
		push	edi
		mov	[ebp+var_C], edx
		nop
		lea	edi, [ebx+64h]
		xor	edx, edx
		push	0
		mov	ecx, edi
		mov	[ebp+var_10], edi
		call	KeAbPreAcquire
		mov	esi, eax
		lock bts dword ptr [edi], 0
		jnb	short loc_A1C17C
		push	edi
		mov	edx, esi
		mov	ecx, edi
		call	ExfAcquirePushLockExclusiveEx

loc_A1C17C:				; CODE XREF: sub_A1C136+3Aj
		test	esi, esi
		jz	short loc_A1C184
		or	byte ptr [esi+0Eh], 1

loc_A1C184:				; CODE XREF: sub_A1C136+48j
		xor	esi, esi
		cmp	[ebx+50h], esi
		jbe	short loc_A1C1D7
		lea	eax, [ebx+4Ch]
		mov	edi, ebx

loc_A1C190:				; CODE XREF: sub_A1C136+9Cj
		mov	ecx, [eax]
		mov	eax, [eax+0Ch]
		imul	ecx, esi
		mov	ebx, [ecx+eax]
		test	ebx, ebx
		jz	short loc_A1C1CB
		mov	eax, [ebx+18h]
		cmp	eax, [ebp+var_C]
		jnz	short loc_A1C1CB
		cmp	dword ptr [ebx+1Ch], 0
		jnz	short loc_A1C1CB
		push	0
		push	esi
		push	0
		xor	edx, edx
		lea	ecx, [edi+4Ch]
		call	sub_A1DCCB
		mov	[ebp+var_4], eax
		test	eax, eax
		js	short loc_A1C1CB
		mov	ecx, ebx
		call	sub_A1B9A1
		dec	esi

loc_A1C1CB:				; CODE XREF: sub_A1C136+67j
					; sub_A1C136+6Fj ...
		inc	esi
		lea	eax, [edi+4Ch]
		cmp	esi, [edi+50h]
		jb	short loc_A1C190
		mov	edi, [ebp+var_10]

loc_A1C1D7:				; CODE XREF: sub_A1C136+53j
		or	eax, 0FFFFFFFFh
		lock xadd [edi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1C1EB
		mov	ecx, edi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1C1EB:				; CODE XREF: sub_A1C136+ACj
		mov	ecx, edi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1C136	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1C206	proc near		; CODE XREF: sub_A1B814+7Fp
					; sub_A1B814+B7p ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	edx, ecx
		push	esi
		xor	esi, esi
		mov	[ebp+var_4], edx
		test	edx, edx
		jz	short loc_A1C25F
		push	ebx
		push	edi

loc_A1C21B:				; CODE XREF: sub_A1C206+3Dj
					; sub_A1C206+41j
		mov	eax, [edx]
		mov	ebx, eax
		mov	edi, [edx+4]
		add	ebx, 1
		mov	ecx, edi
		mov	[ebp+var_8], eax
		adc	ecx, esi
		mov	edx, edi
		nop
		mov	esi, [ebp+var_4]
		lock cmpxchg8b qword ptr [esi]
		mov	ecx, [ebp+var_8]
		mov	ebx, edx
		mov	edx, [ebp+var_4]
		push	0
		pop	esi
		cmp	eax, ecx
		jnz	short loc_A1C21B
		cmp	ebx, edi
		jnz	short loc_A1C21B
		add	ecx, 1
		adc	edi, esi
		cmp	edi, esi
		pop	edi
		pop	ebx
		ja	short loc_A1C25F
		jb	short loc_A1C25A
		cmp	ecx, esi
		ja	short loc_A1C25F

loc_A1C25A:				; CODE XREF: sub_A1C206+4Ej
		mov	esi, 0C00000E5h

loc_A1C25F:				; CODE XREF: sub_A1C206+11j
					; sub_A1C206+4Cj ...
		mov	eax, esi
		pop	esi
		leave
		retn
sub_A1C206	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	sub_A1C264(int,int,void	*Source1)
sub_A1C264	proc near		; CODE XREF: sub_A1BF12+BAp

var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
Length		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
Source1		= dword	ptr  10h

		push	3Ch
		push	offset dword_6AAB78
		call	__SEH_prolog4
		mov	edi, edx
		mov	[ebp+var_48], edi
		mov	[ebp+var_20], ecx
		and	[ebp+var_28], 0
		mov	ebx, [ebp+arg_0]
		cmp	ebx, 1
		jnz	short loc_A1C2A9
		mov	ecx, 0F8h
		push	10h

loc_A1C28B:				; CODE XREF: sub_A1C264+59j
		mov	eax, [ebp+Source1]
		mov	eax, [eax+0F0h]
		mov	[ebp+Length], ecx
		pop	edx
		mul	edx
		test	edx, edx
		ja	short loc_A1C2BF
		jb	short loc_A1C2A5
		cmp	eax, 0FFFFFFFFh
		ja	short loc_A1C2BF

loc_A1C2A5:				; CODE XREF: sub_A1C264+3Aj
		xor	esi, esi
		jmp	short loc_A1C2C7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C2A9:				; CODE XREF: sub_A1C264+1Ej
		call	sub_597FFE
		test	ebx, ebx
		jnz	loc_A1C4B2
		mov	ecx, 0F4h
		push	0Ch
		jmp	short loc_A1C28B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C2BF:				; CODE XREF: sub_A1C264+38j
					; sub_A1C264+3Fj
		mov	esi, 0C0000095h
		or	eax, 0FFFFFFFFh

loc_A1C2C7:				; CODE XREF: sub_A1C264+43j
		mov	[ebp+var_24], eax
		test	esi, esi
		js	loc_A1C4B7
		lea	edx, [ebp+var_28]
		push	edx
		mov	edx, ecx
		mov	ecx, eax
		call	?RtlULongAdd@@YGJKKPAK@Z ; RtlULongAdd(ulong,ulong,ulong *)
		mov	esi, eax
		test	esi, esi
		js	loc_A1C4B7
		mov	[edi+24h], ebx
		mov	eax, [ebp+arg_4]
		mov	[edi+28h], eax
		lea	ebx, [edi+2Ch]
		mov	edx, ebx
		mov	eax, [ebp+var_28]
		mov	[ebp+var_30], eax
		mov	ecx, eax
		call	sub_A1ACD8
		mov	esi, eax
		mov	[ebp+var_1C], esi
		test	esi, esi
		js	loc_A1C4B7
		and	[ebp+ms_exc.disabled], 0
		mov	esi, [ebp+var_30]
		test	esi, esi
		jz	short loc_A1C335
		mov	ecx, [ebp+var_20]
		mov	ecx, [ecx+8]
		lea	edx, [ecx+esi]
		mov	eax, ds:_MmUserProbeAddress
		cmp	edx, eax
		ja	short loc_A1C332
		cmp	edx, ecx
		jnb	short loc_A1C335

loc_A1C332:				; CODE XREF: sub_A1C264+C8j
		mov	byte ptr [eax],	0

loc_A1C335:				; CODE XREF: sub_A1C264+B6j
					; sub_A1C264+CCj
		push	esi		; size_t
		mov	eax, [ebp+var_20]
		push	dword ptr [eax+8] ; void *
		push	dword ptr [ebx]	; void *
		call	_memcpy
		add	esp, 0Ch
		push	1
		mov	edx, esi
		mov	eax, [ebp+var_20]
		mov	ecx, [eax+8]
		call	sub_A1B19E
		mov	esi, eax
		mov	[ebp+var_1C], esi
		test	esi, esi
		jns	short loc_A1C36A

loc_A1C35E:				; CODE XREF: sub_A1C264+117j
					; sub_A1C264+133j ...
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	loc_A1C4B7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C36A:				; CODE XREF: sub_A1C264+F8j
		mov	edx, [ebp+var_30]
		mov	ecx, [ebx]
		call	sub_A1B127
		mov	esi, eax
		mov	[ebp+var_1C], esi
		test	esi, esi
		js	short loc_A1C35E
		push	[ebp+Length]	; Length
		push	dword ptr [ebx]	; Source2
		push	[ebp+Source1]	; Source1
		call	_RtlCompareMemory@12 ; RtlCompareMemory(x,x,x)
		cmp	eax, [ebp+Length]
		jz	short loc_A1C399

loc_A1C38F:				; CODE XREF: sub_A1C264+166j
					; sub_A1C264+18Bj
		mov	esi, 0C000000Dh
		mov	[ebp+var_1C], esi
		jmp	short loc_A1C35E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C399:				; CODE XREF: sub_A1C264+129j
		cmp	dword ptr [edi+24h], 1
		jnz	short loc_A1C3C1
		mov	edx, [ebx]
		mov	ecx, [edx+28h]
		and	ecx, 0FFFFFFFh
		mov	eax, [ebp+var_20]
		mov	eax, [eax+8]
		sub	eax, ecx
		mov	[edi+18h], eax
		and	dword ptr [edi+1Ch], 0
		mov	ebx, [edx+30h]
		mov	eax, [edx+2Ch]
		jmp	short loc_A1C3F9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C3C1:				; CODE XREF: sub_A1C264+139j
		call	sub_597FFE
		cmp	dword ptr [edi+24h], 0
		jnz	short loc_A1C38F
		mov	eax, [ebx]
		mov	ecx, [eax+28h]
		and	ecx, 0FFFFFFFh
		mov	eax, [ebp+var_20]
		mov	eax, [eax+8]
		sub	eax, ecx
		mov	[edi+18h], eax
		and	dword ptr [edi+1Ch], 0
		call	sub_597FFE
		cmp	dword ptr [edi+24h], 0
		jnz	short loc_A1C38F
		mov	eax, [ebx]
		mov	ebx, [eax+30h]
		mov	eax, [eax+2Ch]

loc_A1C3F9:				; CODE XREF: sub_A1C264+15Bj
		mov	[ebp+var_34], ebx
		and	eax, 0FFFFFFFh
		test	ebx, ebx
		jz	short loc_A1C481
		mov	ecx, [edi+18h]
		add	ecx, eax
		mov	[ebp+Source1], ecx
		mov	[ebp+var_4C], ecx
		mov	eax, ebx
		push	4
		pop	edx
		mul	edx
		mov	ebx, eax
		mov	[ebp+var_40], ebx
		mov	[ebp+var_3C], edx
		test	edx, edx
		ja	short loc_A1C42E
		jb	short loc_A1C42A
		cmp	ebx, 0FFFFFFFFh
		ja	short loc_A1C42E

loc_A1C42A:				; CODE XREF: sub_A1C264+1BFj
		xor	esi, esi
		jmp	short loc_A1C436
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C42E:				; CODE XREF: sub_A1C264+1BDj
					; sub_A1C264+1C4j
		or	ebx, 0FFFFFFFFh
		mov	esi, 0C0000095h

loc_A1C436:				; CODE XREF: sub_A1C264+1C8j
		mov	[ebp+var_3C], ebx
		mov	[ebp+var_1C], esi
		test	esi, esi
		js	loc_A1C35E
		test	ebx, ebx
		jz	short loc_A1C45B
		lea	edx, [ecx+ebx]
		mov	eax, ds:_MmUserProbeAddress
		cmp	edx, eax
		ja	short loc_A1C458
		cmp	edx, ecx
		jnb	short loc_A1C45B

loc_A1C458:				; CODE XREF: sub_A1C264+1EEj
		mov	byte ptr [eax],	0

loc_A1C45B:				; CODE XREF: sub_A1C264+1E2j
					; sub_A1C264+1F2j
		lea	edx, [edi+20h]
		mov	ecx, ebx
		call	sub_A1ACD8
		mov	esi, eax
		mov	[ebp+var_1C], esi
		test	esi, esi
		js	loc_A1C35E
		push	ebx		; size_t
		push	[ebp+Source1]	; void *
		push	dword ptr [edi+20h] ; void *
		call	_memcpy
		add	esp, 0Ch

loc_A1C481:				; CODE XREF: sub_A1C264+19Fj
		mov	dword ptr [edi+0Ch], 1
		jmp	loc_A1C35E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C48D:				; DATA XREF: .text:006AAB8Co
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_44], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C49D:				; DATA XREF: .text:006AAB90o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_44]
		mov	[ebp+var_1C], esi
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	edi, [ebp+var_48]
		jmp	short loc_A1C4B7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C4B2:				; CODE XREF: sub_A1C264+4Cj
		mov	esi, 0C000000Dh

loc_A1C4B7:				; CODE XREF: sub_A1C264+68j
					; sub_A1C264+7Fj ...
		mov	[edi+10h], esi
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
sub_A1C264	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1C4CE	proc near		; CODE XREF: sub_A1AAB4+112p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		and	[ebp+var_4], 0
		cmp	[ebp+arg_0], 10h
		push	ebx
		push	esi
		push	edi
		jnb	short loc_A1C4E9
		mov	edi, 0C000000Dh
		jmp	short loc_A1C565
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C4E9:				; CODE XREF: sub_A1C4CE+12j
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_A1BF12
		mov	edi, eax
		test	edi, edi
		js	short loc_A1C565
		mov	eax, large fs:124h
		dec	word ptr [eax+13Eh]
		nop
		mov	ebx, [ebp+var_4]
		xor	edx, edx
		push	0
		lea	esi, [ebx+8]
		mov	ecx, esi
		call	KeAbPreAcquire
		mov	edi, eax
		lock bts dword ptr [esi], 0
		jnb	short loc_A1C52D
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockExclusiveEx

loc_A1C52D:				; CODE XREF: sub_A1C4CE+53j
		test	edi, edi
		jz	short loc_A1C535
		or	byte ptr [edi+0Eh], 1

loc_A1C535:				; CODE XREF: sub_A1C4CE+61j
		mov	ecx, ebx
		call	sub_A1C576
		mov	edi, eax
		or	eax, 0FFFFFFFFh
		lock xadd [esi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1C552
		mov	ecx, esi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1C552:				; CODE XREF: sub_A1C4CE+7Bj
		mov	ecx, esi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)

loc_A1C565:				; CODE XREF: sub_A1C4CE+19j
					; sub_A1C4CE+2Bj
		mov	ecx, [ebp+var_4]
		call	sub_A1B9A1
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1C4CE	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1C576	proc near		; CODE XREF: sub_A1C4CE+69p

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ecx
		xor	ecx, ecx
		push	edi
		mov	edx, [esi+30h]
		mov	eax, edx
		mov	edi, [esi+34h]
		or	eax, edi
		jnz	short loc_A1C593

loc_A1C58F:				; CODE XREF: sub_A1C576+2Bj
		xor	ecx, ecx
		jmp	short loc_A1C60A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C593:				; CODE XREF: sub_A1C576+17j
		add	edx, 0FFFFFFFFh
		mov	[esi+30h], edx
		adc	edi, 0FFFFFFFFh
		or	edx, edi
		mov	[esi+34h], edi
		jnz	short loc_A1C58F
		mov	edi, [esi+38h]
		sub	edi, 1
		js	short loc_A1C60A
		imul	eax, edi, 0Ch
		mov	ebx, edi
		shl	ebx, 4
		mov	[ebp+var_4], eax

loc_A1C5B6:				; CODE XREF: sub_A1C576+8Bj
		cmp	dword ptr [esi+24h], 1
		jnz	short loc_A1C5D0
		mov	edx, [esi+2Ch]
		mov	ecx, esi
		add	edx, 0F8h
		add	edx, ebx
		call	sub_A1C6ED
		jmp	short loc_A1C5EE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C5D0:				; CODE XREF: sub_A1C576+44j
		call	sub_597FFE
		cmp	dword ptr [esi+24h], 0
		jnz	short loc_A1C605
		mov	edx, [ebp+var_4]
		mov	ecx, esi
		add	edx, 0F4h
		add	edx, [esi+2Ch]
		call	sub_A1C611

loc_A1C5EE:				; CODE XREF: sub_A1C576+58j
		mov	ecx, eax
		test	ecx, ecx
		js	short loc_A1C60A
		dec	dword ptr [esi+38h]
		sub	ebx, 10h
		sub	[ebp+var_4], 0Ch
		sub	edi, 1
		jns	short loc_A1C5B6
		jmp	short loc_A1C60A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C605:				; CODE XREF: sub_A1C576+63j
		mov	ecx, 0C000000Dh

loc_A1C60A:				; CODE XREF: sub_A1C576+1Bj
					; sub_A1C576+33j ...
		pop	edi
		pop	esi
		mov	eax, ecx
		pop	ebx
		leave
		retn
sub_A1C576	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1C611	proc near		; CODE XREF: sub_A1C576+73p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		and	[ebp+var_8], 0
		mov	eax, ecx
		and	[ebp+var_C], 0
		mov	ecx, 0FFFFFFFh
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	[ebp+var_10], eax
		mov	esi, [edi+4]
		mov	edx, [edi+8]
		and	esi, ecx
		add	esi, [eax+18h]
		and	edx, ecx
		mov	eax, [edi]
		mov	ecx, esi
		shr	eax, 1
		not	eax
		mov	[ebp+var_14], esi
		and	eax, 1
		push	eax
		call	sub_A1B19E
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A1C6E6
		mov	edx, [edi+8]
		lea	eax, [ebp+var_8]
		push	eax
		and	edx, 0FFFFFFFh
		lea	eax, [ebp+var_C]
		test	byte ptr [edi],	2
		mov	ecx, esi
		push	eax
		jnz	short loc_A1C67A
		call	sub_A1AF61
		jmp	short loc_A1C67F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C67A:				; CODE XREF: sub_A1C611+60j
		call	sub_A1AE51

loc_A1C67F:				; CODE XREF: sub_A1C611+67j
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1C6D3
		mov	esi, [ebp+var_10]
		lea	eax, [ebp-1]
		push	eax		; int
		mov	edx, [ebp+var_14] ; void *
		push	ecx		; int
		mov	esi, [esi+2Ch]
		mov	ecx, 0FFFFFFFh
		mov	[ebp+var_1], 0
		lea	eax, [esi+50h]
		push	eax		; int
		mov	eax, [edi+4]
		and	eax, ecx
		push	eax		; int
		lea	eax, [esi+48h]
		push	eax		; int
		mov	eax, [edi+8]
		and	eax, ecx
		xor	ecx, ecx
		push	eax		; int
		push	[ebp+var_8]	; void *
		inc	ecx		; int
		call	sub_A1AC58
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1C6D3
		mov	eax, [edi]
		movzx	ecx, [ebp+var_1]
		and	eax, 0FFFFFC03h
		shl	ecx, 2
		or	ecx, eax
		mov	[edi], ecx

loc_A1C6D3:				; CODE XREF: sub_A1C611+72j
					; sub_A1C611+AEj
		mov	esi, [ebp+var_C]
		test	esi, esi
		jz	short loc_A1C6E6
		push	esi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)
		push	esi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A1C6E6:				; CODE XREF: sub_A1C611+44j
					; sub_A1C611+C7j
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn
sub_A1C611	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1C6ED	proc near		; CODE XREF: sub_A1C576+53p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		and	[ebp+var_8], 0
		mov	eax, ecx
		and	[ebp+var_C], 0
		mov	ecx, 0FFFFFFFh
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	[ebp+var_10], eax
		mov	ebx, [edi+4]
		mov	edx, [edi+8]
		and	ebx, ecx
		add	ebx, [eax+18h]
		and	edx, ecx
		mov	eax, [edi]
		mov	ecx, ebx
		shr	eax, 1
		not	eax
		and	eax, 1
		push	eax
		call	sub_A1B19E
		mov	esi, eax
		test	esi, esi
		js	loc_A1C7E8
		mov	edx, [edi+8]
		lea	eax, [ebp+var_8]
		push	eax
		and	edx, 0FFFFFFFh
		lea	eax, [ebp+var_C]
		test	byte ptr [edi],	2
		mov	ecx, ebx
		push	eax
		jnz	short loc_A1C753
		call	sub_A1AF61
		jmp	short loc_A1C758
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C753:				; CODE XREF: sub_A1C6ED+5Dj
		call	sub_A1AE51

loc_A1C758:				; CODE XREF: sub_A1C6ED+64j
		mov	esi, eax
		test	esi, esi
		js	short loc_A1C7D5
		mov	esi, [ebp+var_10]
		lea	eax, [ebp-1]
		push	eax		; int
		push	ecx		; int
		mov	ecx, 0FFFFFFFh
		mov	[ebp+var_1], 0
		mov	esi, [esi+2Ch]
		mov	edx, ebx	; void *
		lea	eax, [esi+50h]
		push	eax		; int
		mov	eax, [edi+4]
		and	eax, ecx
		push	eax		; int
		lea	eax, [esi+48h]
		push	eax		; int
		mov	eax, [edi+8]
		and	eax, ecx
		xor	ecx, ecx
		push	eax		; int
		push	[ebp+var_8]	; void *
		inc	ecx		; int
		call	sub_A1AC58
		mov	esi, eax
		test	esi, esi
		js	short loc_A1C7D5
		mov	eax, [edi]
		movzx	ecx, [ebp+var_1]
		and	eax, 0FFFFFC03h
		shl	ecx, 2
		or	ecx, eax
		mov	[edi], ecx
		test	cl, 2
		jnz	short loc_A1C7D5
		mov	eax, [edi+8]
		and	eax, 0FFFFFFFh
		cmp	eax, 4
		jnb	short loc_A1C7C4
		mov	esi, 0C000000Dh
		jmp	short loc_A1C7D5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C7C4:				; CODE XREF: sub_A1C6ED+CEj
		mov	eax, [ebp+var_10]
		mov	ecx, [ebp+var_8]
		mov	eax, [eax+2Ch]
		mov	eax, [eax+0F4h]
		mov	[ecx], eax

loc_A1C7D5:				; CODE XREF: sub_A1C6ED+6Fj
					; sub_A1C6ED+AAj ...
		mov	edi, [ebp+var_C]
		test	edi, edi
		jz	short loc_A1C7E8
		push	edi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)
		push	edi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A1C7E8:				; CODE XREF: sub_A1C6ED+41j
					; sub_A1C6ED+EDj
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1C6ED	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1C7EF	proc near		; CODE XREF: sub_A1BF12+31p

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	20h
		push	offset dword_6AAB98
		call	__SEH_prolog4
		mov	esi, ecx
		mov	[ebp+var_1C], esi
		xor	eax, eax
		lea	edi, [ebp+var_30]
		stosd
		stosd
		stosd
		cmp	edx, 10h
		jnb	short loc_A1C817

loc_A1C80D:				; CODE XREF: sub_A1C7EF+106j
		mov	ebx, 0C000000Dh
		jmp	loc_A1C949
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C817:				; CODE XREF: sub_A1C7EF+1Cj
		lea	edx, [ebp+var_28]
		mov	ecx, 0F4h
		call	sub_A1ACD8
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A1C949
		and	[ebp+ms_exc.disabled], 0
		mov	esi, [esi+8]
		lea	ecx, [esi+0F4h]
		mov	eax, ds:_MmUserProbeAddress
		cmp	ecx, eax
		ja	short loc_A1C848
		cmp	ecx, esi
		jnb	short loc_A1C851

loc_A1C848:				; CODE XREF: sub_A1C7EF+53j
		mov	byte ptr [eax],	0
		mov	eax, [ebp+var_1C]
		mov	esi, [eax+8]

loc_A1C851:				; CODE XREF: sub_A1C7EF+57j
		push	3Dh
		pop	ecx
		mov	edx, [ebp+var_28]
		mov	edi, edx
		rep movsd
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	eax, [edx+24h]
		mov	esi, eax
		and	esi, 0Fh
		mov	[ebp+var_30], esi
		shr	eax, 4
		and	eax, 0Fh
		mov	[ebp+var_2C], eax
		xor	edi, edi
		inc	edi
		cmp	esi, edi
		jnz	short loc_A1C8EE
		push	42524157h
		push	edx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		and	[ebp+var_28], 0
		lea	edx, [ebp+var_28]
		mov	ecx, 0F8h
		call	sub_A1ACD8
		mov	ebx, eax
		test	ebx, ebx
		js	loc_A1C949
		mov	[ebp+ms_exc.disabled], edi
		mov	eax, [ebp+var_1C]
		mov	esi, [eax+8]
		lea	edx, [esi+0F8h]
		mov	ecx, ds:_MmUserProbeAddress
		cmp	edx, ecx
		ja	short loc_A1C8C0
		cmp	edx, esi
		jnb	short loc_A1C8C6

loc_A1C8C0:				; CODE XREF: sub_A1C7EF+CBj
		mov	byte ptr [ecx],	0
		mov	esi, [eax+8]

loc_A1C8C6:				; CODE XREF: sub_A1C7EF+CFj
		push	3Eh
		pop	ecx
		mov	edx, [ebp+var_28]
		mov	edi, edx
		rep movsd
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A1C8FE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C8D9:				; DATA XREF: .text:006AABB8o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_20], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C8E9:				; DATA XREF: .text:006AABBCo
		mov	ebx, [ebp+var_20]
		jmp	short loc_A1C93F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C8EE:				; CODE XREF: sub_A1C7EF+8Cj
		call	sub_597FFE
		test	esi, esi
		jnz	loc_A1C80D
		mov	edx, [ebp+var_28]

loc_A1C8FE:				; CODE XREF: sub_A1C7EF+E8j
		mov	esi, [ebp+arg_4]
		mov	eax, [edx+40h]
		mov	[esi+4], eax
		mov	eax, [edx+28h]
		mov	ecx, [ebp+var_1C]
		and	eax, 0FFFFFFFh
		mov	ecx, [ecx+8]
		sub	ecx, eax
		mov	[esi], ecx
		mov	edi, [ebp+arg_0]
		test	edi, edi
		jz	short loc_A1C949
		lea	esi, [ebp+var_30]
		movsd
		movsd
		movsd
		and	[ebp+var_28], 0
		jmp	short loc_A1C949
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C92C:				; DATA XREF: .text:006AABACo
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_24], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C93C:				; DATA XREF: .text:006AABB0o
		mov	ebx, [ebp+var_24]

loc_A1C93F:				; CODE XREF: sub_A1C7EF+FDj
		mov	esp, [ebp+ms_exc.old_esp]
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh

loc_A1C949:				; CODE XREF: sub_A1C7EF+23j
					; sub_A1C7EF+39j ...
		mov	edx, [ebp+var_28]
		test	edx, edx
		jz	short loc_A1C95B
		push	42524157h
		push	edx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1C95B:				; CODE XREF: sub_A1C7EF+15Fj
		mov	eax, ebx
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1C7EF	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1C96F	proc near		; CODE XREF: sub_A1D230+BBp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	eax, large fs:124h
		push	ebx
		mov	ebx, edx
		mov	[ebp+var_4], ecx
		xor	edx, edx
		dec	word ptr [eax+13Eh]
		push	esi
		push	edi
		mov	[ebp+var_C], edx
		mov	[ebp+var_8], edx
		nop
		lea	edi, [ecx+1Ch]
		push	edx
		mov	ecx, edi
		call	KeAbPreAcquire
		mov	esi, eax
		lock bts dword ptr [edi], 0
		jnb	short loc_A1C9B3
		push	edi
		mov	edx, esi
		mov	ecx, edi
		call	ExfAcquirePushLockExclusiveEx

loc_A1C9B3:				; CODE XREF: sub_A1C96F+38j
		test	esi, esi
		jz	short loc_A1C9BB
		or	byte ptr [esi+0Eh], 1

loc_A1C9BB:				; CODE XREF: sub_A1C96F+46j
		mov	edx, [ebx+18h]
		lea	eax, [ebp+var_C]
		mov	ecx, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_A1D1C0
		mov	esi, eax
		test	esi, esi
		js	short loc_A1C9E2
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1CA29
		mov	ecx, [ebp+var_8]
		mov	[eax], ecx
		jmp	short loc_A1CA29
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1C9E2:				; CODE XREF: sub_A1C96F+63j
		cmp	esi, 0C0000272h
		jnz	short loc_A1CA29
		push	[ebp+var_C]
		mov	edx, ebx
		push	4
		push	dword ptr [ebx+18h]
		push	ecx
		mov	ecx, [ebp+var_4]
		lea	ecx, [ecx+4]
		call	sub_A1DB7E
		mov	esi, eax
		test	esi, esi
		js	short loc_A1CA29
		mov	ecx, ebx
		call	sub_A1D601
		mov	esi, eax
		test	esi, esi
		js	short loc_A1CA29
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1CA1D
		and	dword ptr [eax], 0

loc_A1CA1D:				; CODE XREF: sub_A1C96F+A9j
		mov	ecx, [ebp+var_4]
		mov	edx, ebx
		call	sub_A1CA59
		mov	esi, eax

loc_A1CA29:				; CODE XREF: sub_A1C96F+6Aj
					; sub_A1C96F+71j ...
		or	eax, 0FFFFFFFFh
		lock xadd [edi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1CA3D
		mov	ecx, edi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1CA3D:				; CODE XREF: sub_A1C96F+C5j
		mov	ecx, edi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1C96F	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1CA59	proc near		; CODE XREF: sub_A1C96F+B3p

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, large fs:124h
		push	ebx
		push	esi
		push	edi
		dec	word ptr [eax+13Eh]
		mov	ebx, edx
		mov	[ebp+var_4], ecx
		nop
		lea	esi, [ecx+2Ch]
		xor	edx, edx
		push	0
		mov	ecx, esi
		call	KeAbPreAcquire
		mov	edi, eax
		lock bts dword ptr [esi], 0
		jnb	short loc_A1CA96
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockExclusiveEx

loc_A1CA96:				; CODE XREF: sub_A1CA59+31j
		test	edi, edi
		jz	short loc_A1CA9E
		or	byte ptr [edi+0Eh], 1

loc_A1CA9E:				; CODE XREF: sub_A1CA59+3Fj
		mov	eax, [ebp+var_4]
		add	eax, 24h
		mov	ecx, [eax+4]
		cmp	[ecx], eax
		jz	short loc_A1CAB0
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
					; AL = character to display

loc_A1CAB0:				; CODE XREF: sub_A1CA59+50j
		mov	[ebx], eax
		mov	[ebx+4], ecx
		mov	[ecx], ebx
		mov	[eax+4], ebx
		or	eax, 0FFFFFFFFh
		or	dword ptr [ebx+8], 1
		lock xadd [esi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1CAD2
		mov	ecx, esi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1CAD2:				; CODE XREF: sub_A1CA59+70j
		mov	ecx, esi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		mov	ecx, ebx
		call	sub_A1D601
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1CA59	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1CAF1	proc near		; CODE XREF: sub_A1D36F+C8p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		xor	eax, eax
		mov	esi, ecx
		push	edi
		mov	[ebp+var_C], eax
		mov	ebx, edx
		mov	[ebp+var_8], eax
		mov	edi, [esi+14h]
		mov	ecx, edi
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	10h
		pop	edx
		call	?RtlULongMult@@YGJKKPAK@Z ; RtlULongMult(ulong,ulong,ulong *)
		test	eax, eax
		js	short loc_A1CB91
		mov	edx, [esi+1Ch]
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, edi
		call	?RtlULongAdd@@YGJKKPAK@Z ; RtlULongAdd(ulong,ulong,ulong *)
		test	eax, eax
		js	short loc_A1CB91
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_8]
		push	eax
		push	10h
		pop	edx
		call	?RtlULongMult@@YGJKKPAK@Z ; RtlULongMult(ulong,ulong,ulong *)
		test	eax, eax
		js	short loc_A1CB91
		mov	ecx, [esi+10h]
		lea	eax, [ecx+1]
		cmp	eax, edi
		jb	short loc_A1CB6D
		mov	edx, [ebp+var_C]
		lea	ecx, [esi+18h]
		push	ecx
		push	[ebp+var_8]
		mov	ecx, [ecx]
		call	sub_A1B037
		test	eax, eax
		js	short loc_A1CB91
		mov	eax, [esi+1Ch]
		add	[esi+14h], eax
		mov	ecx, [esi+10h]

loc_A1CB6D:				; CODE XREF: sub_A1CAF1+5Cj
		mov	eax, [ebp+arg_0]
		shl	ecx, 4
		add	ecx, [esi+18h]
		mov	[ecx+4], eax
		mov	eax, [ebp+arg_4]
		mov	[ecx+8], eax
		mov	eax, [ebp+arg_8]
		mov	[ecx], ebx
		mov	[ecx+0Ch], eax
		mov	ecx, ebx
		inc	dword ptr [esi+10h]
		call	sub_A1D601

loc_A1CB91:				; CODE XREF: sub_A1CAF1+2Dj
					; sub_A1CAF1+3Fj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
sub_A1CAF1	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1CB98	proc near		; DATA XREF: sub_A1B2D2+46o

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_0]
		test	ecx, ecx
		jnz	short loc_A1CBB0
		xor	eax, eax
		cmp	[ebp+arg_4], eax
		jz	short loc_A1CBBA
		inc	eax
		xor	edx, edx
		jmp	short loc_A1CBC2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1CBB0:				; CODE XREF: sub_A1CB98+Aj
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jnz	short loc_A1CBBE
		or	eax, 0FFFFFFFFh

loc_A1CBBA:				; CODE XREF: sub_A1CB98+11j
		mov	edx, eax
		jmp	short loc_A1CBC2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1CBBE:				; CODE XREF: sub_A1CB98+1Dj
		sub	eax, [ecx+18h]
		cdq

loc_A1CBC2:				; CODE XREF: sub_A1CB98+16j
					; sub_A1CB98+24j
		pop	ebp
		retn	0Ch
sub_A1CB98	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1CBC6	proc near		; CODE XREF: sub_A1D230+A5p

var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_19		= dword	ptr -19h
arg_0		= dword	ptr  8

		push	64h
		push	offset dword_6AABE0
		call	__SEH_prolog4
		mov	edi, edx
		mov	[ebp+var_5C], ecx
		xor	ebx, ebx
		mov	[ebp+var_30], ebx
		mov	[ebp+var_4C], ebx
		mov	[ebp+var_50], ebx
		mov	byte ptr [ebp+var_19], bl
		mov	eax, ebx
		mov	[ebp+var_28], eax
		mov	[ebp+var_2C], eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_34], eax
		mov	[ebp+var_38], eax
		mov	[ebp+var_40], eax
		mov	[ebp+var_3C], eax
		mov	[ebp+var_44], eax
		mov	[ebp+var_48], ebx
		mov	[ebp+var_54], ebx
		mov	[ebp+var_58], ebx
		mov	eax, dword_6D6BDC
		mov	[ebp+var_68], eax
		lea	edx, [ebp+var_30]
		push	38h
		pop	ecx
		call	sub_A1ACD8
		mov	esi, eax
		test	esi, esi
		js	loc_A1D0D1
		push	38h		; size_t
		push	ebx		; int
		mov	ebx, [ebp+var_30]
		push	ebx		; void *
		call	_memset
		add	esp, 0Ch
		and	dword ptr [ebx+8], 0FFFFFFFEh
		xor	eax, eax
		inc	eax
		mov	[ebx+30h], eax
		and	dword ptr [ebx+34h], 0
		cmp	[edi+8], eax
		jnz	loc_A1CCF5
		lea	ecx, [edi+10h]
		mov	edx, 0F8h
		call	sub_A1B127
		mov	esi, eax
		test	esi, esi
		js	loc_A1D0D4
		xor	eax, eax
		mov	[ebp-4], eax
		push	eax
		push	eax
		push	eax
		push	0F8h
		push	dword ptr [edi+140h]
		call	IoAllocateMdl
		mov	esi, eax
		mov	[ebp+var_20], esi
		mov	[ebp+var_34], esi
		test	esi, esi
		jnz	short loc_A1CC9A

loc_A1CC86:				; CODE XREF: sub_A1CBC6+17Bj
					; sub_A1CBC6+28Ej ...
		mov	esi, 0C0000017h

loc_A1CC8B:				; CODE XREF: sub_A1CBC6+24Ej
		mov	[ebp+var_24], esi

loc_A1CC8E:				; CODE XREF: sub_A1CBC6+2D2j
					; sub_A1CBC6+2F2j ...
		mov	dword ptr [ebp-4], 0FFFFFFFEh
		jmp	loc_A1D0D4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1CC9A:				; CODE XREF: sub_A1CBC6+BEj
		mov	ecx, esi
		call	_MmProbeAndLockPagesPrivate@8 ;	MmProbeAndLockPagesPrivate(x,x)
		xor	eax, eax
		inc	eax
		mov	[ebp+var_48], eax
		mov	dword ptr [ebp-4], 0FFFFFFFEh
		mov	edx, 0F8h
		jmp	loc_A1CD60
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1CCB8:				; DATA XREF: .text:006AABF4o
		mov	eax, [ebp-14h]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_60], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1CCC8:				; DATA XREF: .text:006AABF8o
		mov	esi, [ebp+var_60]

loc_A1CCCB:				; CODE XREF: sub_A1CBC6+4DFj
					; sub_A1CBC6+4FFj
		mov	esp, [ebp+var_19+1]
		mov	[ebp+var_24], esi
		mov	dword ptr [ebp-4], 0FFFFFFFEh
		mov	ebx, [ebp+var_30]
		mov	eax, [ebp+var_2C]
		mov	[ebp+var_28], eax
		mov	edi, [ebp+var_34]
		mov	eax, [ebp+var_40]
		mov	[ebp+var_38], eax
		mov	eax, [ebp+var_44]
		mov	[ebp+var_3C], eax
		jmp	loc_A1D0D7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1CCF5:				; CODE XREF: sub_A1CBC6+7Fj
		call	sub_597FFE
		cmp	dword ptr [edi+8], 0
		jnz	loc_A1D0CA
		lea	ecx, [edi+10h]
		mov	edx, 0F0h
		call	sub_A1B127
		mov	esi, eax
		test	esi, esi
		js	loc_A1D0D4
		mov	dword ptr [ebp-4], 1
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	0F0h
		push	dword ptr [edi+140h]
		call	IoAllocateMdl
		mov	esi, eax
		mov	[ebp+var_20], esi
		mov	[ebp+var_34], esi
		test	esi, esi
		jz	loc_A1CC86
		mov	ecx, esi
		call	_MmProbeAndLockPagesPrivate@8 ;	MmProbeAndLockPagesPrivate(x,x)
		xor	eax, eax
		inc	eax
		mov	[ebp+var_48], eax
		mov	dword ptr [ebp-4], 0FFFFFFFEh
		mov	edx, 0F0h

loc_A1CD60:				; CODE XREF: sub_A1CBC6+EDj
		push	eax
		mov	ecx, [edi+140h]
		call	sub_A1B19E
		mov	esi, eax
		test	esi, esi
		js	loc_A1D0D4
		lea	eax, [ebp+var_50]
		push	eax
		lea	eax, [ebp+var_4C]
		push	eax
		mov	edx, [edi+138h]
		mov	ecx, [ebp+var_5C]
		call	sub_A1DFF5
		mov	esi, eax
		test	esi, esi
		js	loc_A1D0D4
		lea	edx, [ebp+var_2C]
		mov	ecx, [edi+138h]
		call	sub_A1ACD8
		mov	esi, eax
		mov	[ebp+var_24], esi
		test	esi, esi
		js	loc_A1D0AA
		mov	dword ptr [ebp-4], 2
		mov	eax, [edi+118h]
		test	eax, eax
		jz	short loc_A1CDE2
		mov	edx, [edi+110h]
		lea	esi, [edx+eax]
		mov	ecx, ds:_MmUserProbeAddress
		cmp	esi, ecx
		ja	short loc_A1CDD9
		cmp	esi, edx
		jnb	short loc_A1CDE2

loc_A1CDD9:				; CODE XREF: sub_A1CBC6+20Dj
		mov	byte ptr [ecx],	0
		mov	eax, [edi+118h]

loc_A1CDE2:				; CODE XREF: sub_A1CBC6+1FAj
					; sub_A1CBC6+211j
		push	eax		; size_t
		push	dword ptr [edi+110h] ; void *
		mov	eax, [edi+11Ch]
		mov	esi, [ebp+var_2C]
		mov	[ebp+var_28], esi
		add	eax, esi
		push	eax		; void *
		call	_memcpy
		add	esp, 0Ch
		cmp	dword ptr [edi+8], 1
		jnz	short loc_A1CE2A
		cmp	dword ptr [edi+118h], 4
		jnb	short loc_A1CE19

loc_A1CE0F:				; CODE XREF: sub_A1CBC6+26Dj
					; sub_A1CBC6+35Dj ...
		mov	esi, 0C000000Dh
		jmp	loc_A1CC8B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1CE19:				; CODE XREF: sub_A1CBC6+247j
		mov	ecx, [edi+11Ch]
		mov	eax, [edi+120h]
		mov	[esi+ecx], eax
		jmp	short loc_A1CE35
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1CE2A:				; CODE XREF: sub_A1CBC6+23Ej
		call	sub_597FFE
		cmp	dword ptr [edi+8], 0
		jnz	short loc_A1CE0F

loc_A1CE35:				; CODE XREF: sub_A1CBC6+262j
		push	0
		push	0
		push	0
		push	dword ptr [edi+118h]
		push	dword ptr [edi+110h]
		call	IoAllocateMdl
		mov	[ebp+var_38], eax
		mov	[ebp+var_40], eax
		test	eax, eax
		jz	loc_A1CC86
		mov	ecx, eax
		call	_MmProbeAndLockPagesPrivate@8 ;	MmProbeAndLockPagesPrivate(x,x)
		mov	[ebp+var_54], 1
		lea	ecx, [edi+60h]
		mov	edx, [edi+11Ch]
		add	edx, esi	; void *
		lea	eax, [ebp+var_19]
		push	eax		; int
		push	ecx		; int
		push	ecx		; int
		push	dword ptr [edi+114h] ; int
		lea	eax, [edi+58h]
		push	eax		; int
		push	dword ptr [edi+118h] ; int
		push	edx		; void *
		xor	ecx, ecx	; int
		call	sub_A1AC58
		mov	esi, eax
		mov	[ebp+var_24], esi
		test	esi, esi
		js	loc_A1CC8E
		push	1
		mov	edx, [edi+118h]
		mov	ecx, [edi+110h]
		call	sub_A1B19E
		mov	esi, eax
		mov	[ebp+var_24], esi
		test	esi, esi
		js	loc_A1CC8E
		mov	eax, [edi+124h]
		test	eax, eax
		jz	loc_A1CFD2
		mov	ecx, [edi+12Ch]
		mov	edx, eax
		test	ecx, ecx
		jz	short loc_A1CF00
		lea	esi, [ecx+eax]
		mov	edx, ds:_MmUserProbeAddress
		mov	[ebp+var_64], edx
		cmp	esi, edx
		ja	short loc_A1CEF1
		mov	edx, eax
		cmp	esi, eax
		jnb	short loc_A1CF00
		mov	edx, [ebp+var_64]

loc_A1CEF1:				; CODE XREF: sub_A1CBC6+320j
		mov	byte ptr [edx],	0
		mov	ecx, [edi+12Ch]
		mov	edx, [edi+124h]

loc_A1CF00:				; CODE XREF: sub_A1CBC6+310j
					; sub_A1CBC6+326j
		push	ecx		; size_t
		push	edx		; void *
		mov	eax, [edi+130h]
		mov	esi, [ebp+var_28]
		add	eax, esi
		push	eax		; void *
		call	_memcpy
		add	esp, 0Ch
		cmp	dword ptr [edi+8], 1
		jnz	short loc_A1CF3A
		cmp	dword ptr [edi+12Ch], 4
		jb	loc_A1CE0F
		mov	ecx, [edi+130h]
		mov	eax, [edi+134h]
		mov	[esi+ecx], eax
		jmp	short loc_A1CF49
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1CF3A:				; CODE XREF: sub_A1CBC6+354j
		call	sub_597FFE
		cmp	dword ptr [edi+8], 0
		jnz	loc_A1CE0F

loc_A1CF49:				; CODE XREF: sub_A1CBC6+372j
		push	0
		push	0
		push	0
		push	dword ptr [edi+12Ch]
		push	dword ptr [edi+124h]
		call	IoAllocateMdl
		mov	[ebp+var_3C], eax
		mov	[ebp+var_44], eax
		test	eax, eax
		jz	loc_A1CC86
		mov	ecx, eax
		call	_MmProbeAndLockPagesPrivate@8 ;	MmProbeAndLockPagesPrivate(x,x)
		mov	[ebp+var_58], 1
		mov	edx, [edi+130h]
		add	edx, esi	; void *
		lea	eax, [ebp+var_19]
		push	eax		; int
		push	ecx		; int
		lea	eax, [edi+60h]
		push	eax		; int
		push	dword ptr [edi+128h] ; int
		lea	eax, [edi+58h]
		push	eax		; int
		push	dword ptr [edi+12Ch] ; int
		push	edx		; void *
		xor	ecx, ecx	; int
		call	sub_A1AC58
		mov	esi, eax
		mov	[ebp+var_24], esi
		test	esi, esi
		js	loc_A1CC8E
		push	1
		mov	edx, [edi+12Ch]
		mov	ecx, [edi+124h]
		call	sub_A1B19E
		mov	esi, eax
		mov	[ebp+var_24], esi
		test	esi, esi
		js	loc_A1CC8E

loc_A1CFD2:				; CODE XREF: sub_A1CBC6+300j
		push	dword ptr [edi+138h] ; size_t
		mov	eax, [ebp+var_28]
		push	eax		; void *
		mov	esi, [ebp+var_4C]
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	dword ptr [ebp-4], 0FFFFFFFEh
		mov	eax, [edi]
		mov	[ebx+28h], eax
		mov	[ebx+14h], esi
		mov	eax, [edi+11Ch]
		mov	ecx, [ebp+var_50]
		add	eax, ecx
		mov	[ebx+0Ch], eax
		mov	eax, [edi+130h]
		test	eax, eax
		jz	short loc_A1D016
		add	eax, ecx
		mov	[ebx+10h], eax
		jmp	short loc_A1D01A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D016:				; CODE XREF: sub_A1CBC6+447j
		and	dword ptr [ebx+10h], 0

loc_A1D01A:				; CODE XREF: sub_A1CBC6+44Ej
		mov	eax, [edi+138h]
		mov	[ebx+2Ch], eax
		mov	eax, [edi+110h]
		mov	[ebx+18h], eax
		mov	eax, [edi+110h]
		sub	eax, [ebx+0Ch]
		mov	[ebx+20h], eax
		and	dword ptr [ebx+24h], 0
		mov	ecx, esi
		mov	eax, [ebx+28h]
		mov	[ecx], eax
		mov	eax, [ebx+14h]
		mov	ecx, [ebp+var_68]
		mov	[eax+8], ecx
		and	dword ptr [eax+0Ch], 0
		push	dword ptr [edi+118h]
		push	dword ptr [ebx+0Ch]
		push	0FFFFFFFFh
		call	_ZwFlushInstructionCache@12 ; ZwFlushInstructionCache(x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D0D4
		cmp	dword ptr [edi+124h], 0
		jz	short loc_A1D085
		push	dword ptr [edi+12Ch]
		push	dword ptr [ebx+10h]
		push	0FFFFFFFFh
		call	_ZwFlushInstructionCache@12 ; ZwFlushInstructionCache(x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D0D4

loc_A1D085:				; CODE XREF: sub_A1CBC6+4A7j
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1D0D4
		mov	[eax], ebx
		xor	ebx, ebx
		jmp	short loc_A1D0D4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D092:				; DATA XREF: .text:006AAC0Co
		mov	eax, [ebp-14h]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_6C], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D0A2:				; DATA XREF: .text:006AAC10o
		mov	esi, [ebp+var_6C]
		jmp	loc_A1CCCB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D0AA:				; CODE XREF: sub_A1CBC6+1E5j
		mov	eax, [ebp+var_2C]
		mov	[ebp+var_28], eax
		jmp	short loc_A1D0D4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D0B2:				; DATA XREF: .text:006AAC00o
		mov	eax, [ebp-14h]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_70], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D0C2:				; DATA XREF: .text:006AAC04o
		mov	esi, [ebp+var_70]
		jmp	loc_A1CCCB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D0CA:				; CODE XREF: sub_A1CBC6+138j
		mov	esi, 0C000000Dh
		jmp	short loc_A1D0D4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D0D1:				; CODE XREF: sub_A1CBC6+59j
		mov	ebx, [ebp+var_30]

loc_A1D0D4:				; CODE XREF: sub_A1CBC6+96j
					; sub_A1CBC6+CFj ...
		mov	edi, [ebp+var_20]

loc_A1D0D7:				; CODE XREF: sub_A1CBC6+12Aj
		test	edi, edi
		jz	short loc_A1D0ED
		cmp	[ebp+var_48], 0
		jz	short loc_A1D0E7
		push	edi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)

loc_A1D0E7:				; CODE XREF: sub_A1CBC6+519j
		push	edi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A1D0ED:				; CODE XREF: sub_A1CBC6+513j
		mov	edi, [ebp+var_38]
		test	edi, edi
		jz	short loc_A1D106
		cmp	[ebp+var_54], 0
		jz	short loc_A1D100
		push	edi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)

loc_A1D100:				; CODE XREF: sub_A1CBC6+532j
		push	edi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A1D106:				; CODE XREF: sub_A1CBC6+52Cj
		mov	edi, [ebp+var_3C]
		test	edi, edi
		jz	short loc_A1D11F
		cmp	[ebp+var_58], 0
		jz	short loc_A1D119
		push	edi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)

loc_A1D119:				; CODE XREF: sub_A1CBC6+54Bj
		push	edi
		call	_IoFreeMdl@4	; IoFreeMdl(x)

loc_A1D11F:				; CODE XREF: sub_A1CBC6+545j
		mov	edx, ebx
		mov	ecx, [ebp+var_5C]
		call	sub_A1D14F
		mov	eax, [ebp+var_28]
		test	eax, eax
		jz	short loc_A1D13B
		push	42524157h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1D13B:				; CODE XREF: sub_A1CBC6+568j
		mov	eax, esi
		mov	ecx, [ebp-10h]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1CBC6	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1D14F	proc near		; CODE XREF: sub_A1B40A+58p
					; sub_A1B40A+89p ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		mov	eax, edx
		mov	[ebp+var_10], ecx
		xor	esi, esi
		mov	[ebp+var_C], eax
		push	edi
		mov	edi, esi
		test	eax, eax
		jz	short loc_A1D1B7
		add	eax, 30h
		mov	[ebp+var_4], eax

loc_A1D170:				; CODE XREF: sub_A1D14F+49j
					; sub_A1D14F+4Dj
		mov	edx, [eax]
		mov	ebx, edx
		mov	edi, [eax+4]
		sub	ebx, 1
		mov	ecx, edi
		mov	[ebp+var_8], edx
		mov	eax, edx
		sbb	ecx, esi
		mov	edx, edi
		nop
		mov	esi, [ebp+var_4]
		lock cmpxchg8b qword ptr [esi]
		mov	ecx, [ebp+var_8]
		cmp	eax, ecx
		mov	eax, [ebp+var_4]
		push	0
		pop	esi
		jnz	short loc_A1D170
		cmp	edx, edi
		jnz	short loc_A1D170
		mov	esi, ecx
		add	esi, 0FFFFFFFFh
		mov	ecx, esi
		adc	edi, 0FFFFFFFFh
		or	ecx, edi
		jnz	short loc_A1D1B7
		mov	edx, [ebp+var_C]
		mov	ecx, [ebp+var_10]
		call	sub_A1D1FE

loc_A1D1B7:				; CODE XREF: sub_A1D14F+19j
					; sub_A1D14F+5Bj
		mov	edx, edi
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1D14F	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1D1C0	proc near		; CODE XREF: sub_A1C96F+5Ap
					; sub_A1D230+6Cp

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	[ebp+arg_4]
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	eax
		push	4
		add	ecx, 4
		call	WbFindLookupEntry
		test	eax, eax
		js	short locret_A1D1FA
		push	esi
		mov	esi, [ebp+arg_0]
		test	esi, esi
		jz	short loc_A1D1F9
		push	edi
		mov	edi, [ebp+var_4]
		mov	ecx, edi
		call	sub_A1D601
		test	eax, eax
		js	short loc_A1D1F8
		mov	[esi], edi

loc_A1D1F8:				; CODE XREF: sub_A1D1C0+34j
		pop	edi

loc_A1D1F9:				; CODE XREF: sub_A1D1C0+25j
		pop	esi

locret_A1D1FA:				; CODE XREF: sub_A1D1C0+1Dj
		leave
		retn	8
sub_A1D1C0	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1D1FE	proc near		; CODE XREF: sub_A1D14F+63p
		mov	edi, edi
		push	esi
		mov	esi, edx
		test	esi, esi
		jz	short loc_A1D22C
		mov	edx, [esi+14h]
		test	edx, edx
		jz	short loc_A1D221
		call	sub_A1E37F
		xor	eax, eax
		mov	[esi+14h], eax
		mov	[esi+0Ch], eax
		mov	[esi+10h], eax
		mov	[esi+2Ch], eax

loc_A1D221:				; CODE XREF: sub_A1D1FE+Ej
		push	42524157h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1D22C:				; CODE XREF: sub_A1D1FE+7j
		xor	eax, eax
		pop	esi
		retn
sub_A1D1FE	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1D230	proc near		; CODE XREF: sub_A1D36F+7Ep

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		and	[ebp+var_4], 0
		xor	eax, eax
		push	ebx
		mov	ebx, ecx
		mov	[ebp+var_10], edx
		push	esi
		push	edi
		mov	[ebp+var_8], eax
		mov	edx, [ebx+8]
		sub	edx, [ebx+20h]
		mov	[ebp+var_C], eax
		call	sub_A1D767
		call	_KeEnterGuardedRegion@0	; KeEnterGuardedRegion()
		lea	esi, [ebx+1Ch]
		xor	edx, edx
		push	0
		mov	ecx, esi
		call	KeAbPreAcquire
		push	11h
		mov	edi, eax
		xor	eax, eax
		pop	ecx
		lock cmpxchg [esi], ecx
		test	eax, eax
		jz	short loc_A1D283
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockSharedEx

loc_A1D283:				; CODE XREF: sub_A1D230+47j
		test	edi, edi
		jz	short loc_A1D28B
		or	byte ptr [edi+0Eh], 1

loc_A1D28B:				; CODE XREF: sub_A1D230+55j
		mov	edx, [ebp+var_10]
		lea	eax, [ebp+var_4]
		push	0
		push	eax
		mov	ecx, ebx
		mov	edx, [edx+110h]
		call	sub_A1D1C0
		push	11h
		mov	edi, eax
		xor	edx, edx
		pop	eax
		lock cmpxchg [esi], edx
		cmp	eax, 11h
		jz	short loc_A1D2B8
		mov	ecx, esi
		call	@ExfReleasePushLockShared@4 ; ExfReleasePushLockShared(x)

loc_A1D2B8:				; CODE XREF: sub_A1D230+7Fj
		mov	ecx, esi
		call	KeAbPostRelease
		call	_KeLeaveGuardedRegion@0	; KeLeaveGuardedRegion()
		cmp	edi, 0C0000272h
		jnz	short loc_A1D312
		mov	edx, [ebp+var_10]
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, ebx
		call	sub_A1CBC6
		mov	esi, [ebp+var_4]
		mov	edi, eax
		test	edi, edi
		js	short loc_A1D32D
		lea	eax, [ebp+var_C]
		mov	edx, esi
		push	eax
		mov	ecx, ebx
		call	sub_A1C96F
		mov	edi, eax
		mov	eax, [ebp+var_C]
		mov	[ebp+var_8], eax
		test	edi, edi
		js	short loc_A1D32D
		test	eax, eax
		jz	short loc_A1D319
		mov	edx, esi
		mov	ecx, ebx
		call	sub_A1D14F
		mov	esi, [ebp+var_8]
		and	[ebp+var_8], 0
		jmp	short loc_A1D319
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D312:				; CODE XREF: sub_A1D230+9Aj
		mov	esi, [ebp+var_4]
		test	edi, edi
		js	short loc_A1D32D

loc_A1D319:				; CODE XREF: sub_A1D230+CEj
					; sub_A1D230+E0j
		mov	edx, esi
		mov	ecx, ebx
		call	sub_A1D660
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1D32D
		mov	[eax], esi
		xor	esi, esi

loc_A1D32D:				; CODE XREF: sub_A1D230+B1j
					; sub_A1D230+CAj ...
		mov	edx, esi
		mov	ecx, ebx
		call	sub_A1D14F
		mov	edx, [ebp+var_8]
		mov	ecx, ebx
		call	sub_A1D14F
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1D230	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1D349	proc near		; CODE XREF: sub_A1D4C6+29p
		mov	edi, edi
		push	esi
		mov	esi, [ecx+10h]
		xor	eax, eax
		test	esi, esi
		jnz	short loc_A1D35C
		mov	eax, 0C000000Dh
		pop	esi
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D35C:				; CODE XREF: sub_A1D349+Aj
		test	edx, edx
		jz	short loc_A1D36D
		mov	ecx, [ecx+18h]
		shl	esi, 4
		add	ecx, 0FFFFFFF0h
		add	ecx, esi
		mov	[edx], ecx

loc_A1D36D:				; CODE XREF: sub_A1D349+15j
		pop	esi
		retn
sub_A1D349	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	sub_A1D36F(int,size_t)
sub_A1D36F	proc near		; CODE XREF: sub_A1AAB4+123p

var_170		= dword	ptr -170h
var_16C		= dword	ptr -16Ch
var_168		= dword	ptr -168h
var_164		= dword	ptr -164h
var_160		= dword	ptr -160h
var_15C		= dword	ptr -15Ch
var_158		= dword	ptr -158h
var_154		= dword	ptr -154h
var_150		= dword	ptr -150h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 174h
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+174h+var_4], eax
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	[esp+180h+var_158], eax
		lea	edi, [esp+180h+var_168]
		xor	eax, eax
		mov	[esp+180h+var_15C], ecx
		stosd
		xor	ebx, ebx
		push	148h		; size_t
		mov	esi, edx
		mov	[esp+184h+var_170], ebx
		push	ebx		; int
		stosd
		mov	[esp+188h+var_154], esi
		mov	[esp+188h+var_16C], ebx
		stosd
		lea	eax, [esp+188h+var_150]
		push	eax		; void *
		call	_memset
		mov	edx, [ebp+arg_4]
		lea	eax, [esp+18Ch+var_150]
		add	esp, 0Ch
		mov	ecx, esi
		push	eax		; void *
		call	sub_A1D969
		mov	esi, eax
		test	esi, esi
		js	loc_A1D493
		mov	ebx, [esp+180h+var_15C]
		lea	eax, [esp+180h+var_170]
		push	eax
		lea	edx, [esp+184h+var_150]
		mov	ecx, ebx
		call	sub_A1D230
		mov	esi, eax
		test	esi, esi
		js	loc_A1D48F
		lea	eax, [esp+180h+var_16C]
		mov	ecx, ebx
		push	eax
		call	sub_A1E613
		mov	edi, [esp+180h+var_16C]
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D489
		lea	edx, [esp+180h+var_168]
		mov	ecx, edi
		call	sub_A1AD29
		mov	ebx, [esp+180h+var_170]
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D497
		push	[esp+180h+var_160]
		mov	edx, ebx
		mov	ecx, edi
		push	[esp+184h+var_168]
		push	[esp+188h+var_164]
		call	sub_A1CAF1
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D497
		push	[ebp+arg_4]	; size_t
		lea	eax, [esp+184h+var_168]
		mov	edx, ebx
		push	[esp+184h+var_158] ; void *
		lea	ecx, [esp+188h+var_150]
		push	[esp+188h+var_154] ; void *
		push	eax		; int
		call	sub_A1D8A2
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D497
		and	[esp+180h+var_160], 0FFFFFEFFh
		mov	eax, [ebx+0Ch]
		lea	edx, [esp+180h+var_168]
		mov	ecx, edi
		mov	[esp+180h+var_164], eax
		call	sub_A1B0AD
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D497
		mov	esi, [esp+180h+var_164]
		jmp	short loc_A1D497
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D489:				; CODE XREF: sub_A1D36F+A1j
		mov	ebx, [esp+180h+var_170]
		jmp	short loc_A1D497
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D48F:				; CODE XREF: sub_A1D36F+87j
		mov	ebx, [esp+180h+var_170]

loc_A1D493:				; CODE XREF: sub_A1D36F+69j
		mov	edi, [esp+180h+var_16C]

loc_A1D497:				; CODE XREF: sub_A1D36F+B6j
					; sub_A1D36F+D1j ...
		mov	ecx, [esp+180h+var_15C]
		mov	edx, edi
		call	sub_A1E4FB
		mov	ecx, [esp+180h+var_15C]
		mov	edx, ebx
		call	sub_A1D14F
		mov	ecx, [esp+180h+var_4]
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn	8
sub_A1D36F	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1D4C6	proc near		; CODE XREF: sub_A1AAB4+133p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		and	[ebp+var_8], 0
		push	ebx
		push	esi
		push	eax
		mov	ebx, ecx
		call	sub_A1E613
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D52E
		mov	ecx, [ebp+var_4]
		lea	edx, [ebp+var_8]
		call	sub_A1D349
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D52E
		mov	ecx, [ebp+var_8]
		lea	edx, [ebp+var_14]
		mov	eax, [ecx+4]
		mov	[ebp+var_10], eax
		mov	eax, [ecx+8]
		mov	[ebp+var_14], eax
		mov	eax, [ecx+0Ch]
		mov	ecx, [ebp+var_4]
		mov	[ebp+var_C], eax
		call	sub_A1B0AD
		mov	esi, eax
		test	esi, esi
		js	short loc_A1D52E
		mov	edx, [ebp+var_4]
		mov	ecx, ebx
		push	1
		call	sub_A1D706
		mov	esi, eax

loc_A1D52E:				; CODE XREF: sub_A1D4C6+21j
					; sub_A1D4C6+32j ...
		mov	edx, [ebp+var_4]
		mov	ecx, ebx
		call	sub_A1E4FB
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1D4C6	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall WbHeapExecutionUnloadModule(x, x)
_WbHeapExecutionUnloadModule@8 proc near ; CODE	XREF: sub_A1B649+94p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, large fs:124h
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		dec	word ptr [eax+13Eh]
		mov	ebx, ecx
		push	edi
		mov	[ebp+var_8], edx
		nop
		lea	edi, [ebx+1Ch]
		xor	edx, edx
		push	0
		mov	ecx, edi
		call	KeAbPreAcquire
		mov	esi, eax
		lock bts dword ptr [edi], 0
		jnb	short loc_A1D581
		push	edi
		mov	edx, esi
		mov	ecx, edi
		call	ExfAcquirePushLockExclusiveEx

loc_A1D581:				; CODE XREF: WbHeapExecutionUnloadModule(x,x)+37j
		test	esi, esi
		jz	short loc_A1D589
		or	byte ptr [esi+0Eh], 1

loc_A1D589:				; CODE XREF: WbHeapExecutionUnloadModule(x,x)+45j
		xor	esi, esi
		cmp	[ebx+8], esi
		jbe	short loc_A1D5D2

loc_A1D590:				; CODE XREF: WbHeapExecutionUnloadModule(x,x)+92j
		mov	ecx, [ebx+4]
		mov	eax, [ebx+10h]
		imul	ecx, esi
		mov	eax, [ecx+eax]
		mov	[ebp+var_C], eax
		test	eax, eax
		jz	short loc_A1D5CC
		mov	ecx, [ebp+var_8]
		cmp	[eax+28h], ecx
		jnz	short loc_A1D5CC
		push	0
		push	esi
		push	0
		xor	edx, edx
		lea	ecx, [ebx+4]
		call	sub_A1DCCB
		mov	[ebp+var_4], eax
		test	eax, eax
		js	short loc_A1D5CC
		mov	edx, [ebp+var_C]
		mov	ecx, ebx
		call	sub_A1D14F
		dec	esi

loc_A1D5CC:				; CODE XREF: WbHeapExecutionUnloadModule(x,x)+63j
					; WbHeapExecutionUnloadModule(x,x)+6Bj	...
		inc	esi
		cmp	esi, [ebx+8]
		jb	short loc_A1D590

loc_A1D5D2:				; CODE XREF: WbHeapExecutionUnloadModule(x,x)+50j
		or	eax, 0FFFFFFFFh
		lock xadd [edi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1D5E6
		mov	ecx, edi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1D5E6:				; CODE XREF: WbHeapExecutionUnloadModule(x,x)+9Fj
		mov	ecx, edi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_WbHeapExecutionUnloadModule@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1D601	proc near		; CODE XREF: sub_A1C96F+99p
					; sub_A1CA59+8Ep ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		xor	esi, esi
		test	ecx, ecx
		jz	short loc_A1D65B
		lea	edx, [ecx+30h]
		push	ebx
		mov	[ebp+var_4], edx
		push	edi

loc_A1D617:				; CODE XREF: sub_A1D601+3Ej
					; sub_A1D601+42j
		mov	eax, [edx]
		mov	ebx, eax
		mov	edi, [edx+4]
		add	ebx, 1
		mov	ecx, edi
		mov	[ebp+var_8], eax
		adc	ecx, esi
		mov	edx, edi
		nop
		mov	esi, [ebp+var_4]
		lock cmpxchg8b qword ptr [esi]
		mov	ecx, [ebp+var_8]
		mov	ebx, edx
		mov	edx, [ebp+var_4]
		push	0
		pop	esi
		cmp	eax, ecx
		jnz	short loc_A1D617
		cmp	ebx, edi
		jnz	short loc_A1D617
		add	ecx, 1
		adc	edi, esi
		cmp	edi, esi
		pop	edi
		pop	ebx
		ja	short loc_A1D65B
		jb	short loc_A1D656
		cmp	ecx, esi
		ja	short loc_A1D65B

loc_A1D656:				; CODE XREF: sub_A1D601+4Fj
		mov	esi, 0C00000E5h

loc_A1D65B:				; CODE XREF: sub_A1D601+Cj
					; sub_A1D601+4Dj ...
		mov	eax, esi
		pop	esi
		leave
		retn
sub_A1D601	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1D660	proc near		; CODE XREF: sub_A1D230+EDp

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, large fs:124h
		push	ebx
		push	esi
		push	edi
		dec	word ptr [eax+13Eh]
		mov	esi, edx
		mov	[ebp+var_4], ecx
		nop
		lea	edi, [ecx+2Ch]
		xor	edx, edx
		push	0
		mov	ecx, edi
		call	KeAbPreAcquire
		mov	ebx, eax
		lock bts dword ptr [edi], 0
		jnb	short loc_A1D69D
		push	edi
		mov	edx, ebx
		mov	ecx, edi
		call	ExfAcquirePushLockExclusiveEx

loc_A1D69D:				; CODE XREF: sub_A1D660+31j
		test	ebx, ebx
		jz	short loc_A1D6A5
		or	byte ptr [ebx+0Eh], 1

loc_A1D6A5:				; CODE XREF: sub_A1D660+3Fj
		test	byte ptr [esi+8], 1
		jz	short loc_A1D6D5
		mov	eax, [esi]
		cmp	[eax+4], esi
		jnz	short loc_A1D701
		mov	ecx, [esi+4]
		cmp	[ecx], esi
		jnz	short loc_A1D701
		mov	[ecx], eax
		mov	[eax+4], ecx
		mov	eax, [ebp+var_4]
		add	eax, 24h
		mov	ecx, [eax+4]
		cmp	[ecx], eax
		jnz	short loc_A1D701
		mov	[esi], eax
		mov	[esi+4], ecx
		mov	[ecx], esi
		mov	[eax+4], esi

loc_A1D6D5:				; CODE XREF: sub_A1D660+49j
		or	eax, 0FFFFFFFFh
		lock xadd [edi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1D6E9
		mov	ecx, edi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1D6E9:				; CODE XREF: sub_A1D660+80j
		mov	ecx, edi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D701:				; CODE XREF: sub_A1D660+50j
					; sub_A1D660+57j ...
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
sub_A1D660	endp			; AL = character to display


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1D706	proc near		; CODE XREF: sub_A1D4C6+61p
					; sub_A1E5D7+11p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		xor	eax, eax
		mov	[ebp+var_4], ecx
		mov	ebx, edx
		push	edi
		cmp	esi, 0FFFFFFFFh
		jg	short loc_A1D726
		mov	esi, [ebx+10h]
		mov	ecx, esi
		jmp	short loc_A1D729
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D726:				; CODE XREF: sub_A1D706+17j
		mov	ecx, [ebx+10h]

loc_A1D729:				; CODE XREF: sub_A1D706+1Ej
		cmp	esi, ecx
		jbe	short loc_A1D734
		mov	eax, 0C000000Dh
		jmp	short loc_A1D760
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D734:				; CODE XREF: sub_A1D706+25j
		test	esi, esi
		jle	short loc_A1D760

loc_A1D738:				; CODE XREF: sub_A1D706+56j
		mov	ecx, [ebx+10h]
		mov	edi, [ebx+18h]
		shl	ecx, 4
		add	edi, 0FFFFFFF0h
		add	edi, ecx
		mov	ecx, [ebp+var_4]
		mov	edx, [edi]
		call	sub_A1D14F
		xor	eax, eax
		stosd
		stosd
		stosd
		stosd
		dec	dword ptr [ebx+10h]
		sub	esi, 1
		jnz	short loc_A1D738
		xor	eax, eax

loc_A1D760:				; CODE XREF: sub_A1D706+2Cj
					; sub_A1D706+30j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1D706	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1D767	proc near		; CODE XREF: sub_A1D230+22p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		test	edx, edx
		jle	loc_A1D898
		lea	ebx, [edi+2Ch]

loc_A1D77F:				; CODE XREF: sub_A1D767+12Bj
		mov	eax, large fs:124h
		lea	ecx, [edi+1Ch]
		dec	edx
		mov	[ebp+var_8], edx
		dec	word ptr [eax+13Eh]
		nop
		push	0
		xor	edx, edx
		call	KeAbPreAcquire
		mov	esi, eax
		lea	eax, [edi+1Ch]
		lock bts dword ptr [eax], 0
		jnb	short loc_A1D7B3
		push	eax
		mov	edx, esi
		mov	ecx, eax
		call	ExfAcquirePushLockExclusiveEx

loc_A1D7B3:				; CODE XREF: sub_A1D767+40j
		test	esi, esi
		jz	short loc_A1D7BB
		or	byte ptr [esi+0Eh], 1

loc_A1D7BB:				; CODE XREF: sub_A1D767+4Ej
		push	0
		xor	edx, edx
		mov	ecx, ebx
		call	KeAbPreAcquire
		mov	esi, eax
		lock bts dword ptr [ebx], 0
		jnb	short loc_A1D7D9
		push	ebx
		mov	edx, esi
		mov	ecx, ebx
		call	ExfAcquirePushLockExclusiveEx

loc_A1D7D9:				; CODE XREF: sub_A1D767+66j
		test	esi, esi
		jz	short loc_A1D7E1
		or	byte ptr [esi+0Eh], 1

loc_A1D7E1:				; CODE XREF: sub_A1D767+74j
		lea	edx, [edi+24h]
		mov	eax, [edx]
		cmp	eax, edx
		jz	short loc_A1D805
		cmp	[eax+4], edx
		jnz	loc_A1D89D
		mov	ecx, [eax]
		cmp	[ecx+4], eax
		jnz	loc_A1D89D
		mov	[edx], ecx
		mov	[ecx+4], edx
		jmp	short loc_A1D807
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D805:				; CODE XREF: sub_A1D767+81j
		xor	eax, eax

loc_A1D807:				; CODE XREF: sub_A1D767+9Cj
		xor	esi, esi
		test	eax, eax
		jz	short loc_A1D813
		and	dword ptr [eax+8], 0FFFFFFFEh
		mov	esi, eax

loc_A1D813:				; CODE XREF: sub_A1D767+A4j
		or	eax, 0FFFFFFFFh
		lock xadd [ebx], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1D827
		mov	ecx, ebx
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1D827:				; CODE XREF: sub_A1D767+B7j
		mov	ecx, ebx
		call	KeAbPostRelease
		test	esi, esi
		jz	short loc_A1D857
		mov	edx, [esi+18h]
		lea	eax, [ebp+var_4]
		and	[ebp+var_4], 0
		lea	ecx, [edi+4]
		push	eax
		push	0FFFFFFFFh
		push	4
		call	sub_A1DCCB
		test	eax, eax
		js	short loc_A1D857
		mov	edx, [ebp+var_4]
		mov	ecx, edi
		call	sub_A1D14F

loc_A1D857:				; CODE XREF: sub_A1D767+C9j
					; sub_A1D767+E4j
		or	eax, 0FFFFFFFFh
		lea	ecx, [edi+1Ch]
		lock xadd [ecx], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1D86F
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)
		lea	ecx, [edi+1Ch]

loc_A1D86F:				; CODE XREF: sub_A1D767+FEj
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		test	esi, esi
		jz	short loc_A1D898
		mov	edx, esi
		mov	ecx, edi
		call	sub_A1D14F
		mov	edx, [ebp+var_8]
		test	edx, edx
		jg	loc_A1D77F

loc_A1D898:				; CODE XREF: sub_A1D767+Fj
					; sub_A1D767+11Bj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D89D:				; CODE XREF: sub_A1D767+86j
					; sub_A1D767+91j
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
sub_A1D767	endp			; AL = character to display


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	sub_A1D8A2(int,void *,void *,size_t)
sub_A1D8A2	proc near		; CODE XREF: sub_A1D36F+E9p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	18h
		push	offset dword_6AABC0
		call	__SEH_prolog4
		mov	eax, ecx
		mov	[ebp+var_1C], eax
		xor	esi, esi
		cmp	[eax+124h], esi
		jz	short loc_A1D8DD
		cmp	[ebp+arg_C], 20h
		jnb	short loc_A1D8CD
		mov	esi, 80000005h
		jmp	loc_A1D955
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D8CD:				; CODE XREF: sub_A1D8A2+1Fj
		mov	eax, [edx+10h]
		cdq
		mov	ecx, [ebp+arg_4]
		mov	[ecx+18h], eax
		mov	[ecx+1Ch], edx
		mov	eax, [ebp+var_1C]

loc_A1D8DD:				; CODE XREF: sub_A1D8A2+19j
		mov	[ebp+ms_exc.disabled], esi
		mov	edi, esi
		mov	ebx, [ebp+arg_0]

loc_A1D8E5:				; CODE XREF: sub_A1D8A2+6Bj
		mov	[ebp+var_20], edi
		mov	eax, [eax+13Ch]
		shr	eax, 0Ah
		inc	eax
		cmp	edi, eax
		jnb	short loc_A1D90F
		push	1
		push	4
		mov	ecx, edi
		shl	ecx, 0Ah
		mov	eax, [ebx]
		sub	eax, ecx
		push	eax
		call	_ProbeForWrite@12 ; ProbeForWrite(x,x,x)
		inc	edi
		mov	eax, [ebp+var_1C]
		jmp	short loc_A1D8E5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D90F:				; CODE XREF: sub_A1D8A2+52j
		add	dword ptr [ebx], 0FFFFFFF0h
		mov	edx, [ebx]
		add	edx, 0FFFFFFF0h
		mov	[ebx], edx
		mov	[ebp+var_28], esi
		mov	ecx, [ebp+arg_8]
		lea	eax, [ecx+10h]
		mov	[edx], eax
		push	[ebp+arg_C]	; size_t
		push	[ebp+arg_4]	; void *
		push	ecx		; void *
		call	_memcpy
		add	esp, 0Ch
		jmp	short loc_A1D94E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D935:				; DATA XREF: .text:006AABD4o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_24], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D945:				; DATA XREF: .text:006AABD8o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_24]
		mov	[ebp+var_28], esi

loc_A1D94E:				; CODE XREF: sub_A1D8A2+91j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh

loc_A1D955:				; CODE XREF: sub_A1D8A2+26j
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_A1D8A2	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	sub_A1D969(void	*)
sub_A1D969	proc near		; CODE XREF: sub_A1D36F+60p

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	1Ch
		push	offset dword_6AAC18
		call	__SEH_prolog4
		mov	esi, edx
		mov	edi, ecx
		mov	[ebp+var_1C], edi
		mov	ebx, [ebp+arg_0]
		push	148h		; size_t
		push	0		; int
		push	ebx		; void *
		call	_memset
		add	esp, 0Ch
		cmp	esi, 18h
		jnb	short loc_A1D99E

loc_A1D994:				; CODE XREF: sub_A1D969+38j
					; sub_A1D969+CDj ...
		mov	edx, 0C000000Dh
		jmp	loc_A1DB6A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1D99E:				; CODE XREF: sub_A1D969+29j
		cmp	dword ptr [edi], 3
		jnz	short loc_A1D994
		xor	edx, edx
		mov	[ebp+ms_exc.disabled], edx
		mov	esi, [edi+8]
		lea	ecx, [esi+0F0h]
		mov	eax, ds:_MmUserProbeAddress
		cmp	ecx, eax
		ja	short loc_A1D9BE
		cmp	ecx, esi
		jnb	short loc_A1D9C3

loc_A1D9BE:				; CODE XREF: sub_A1D969+4Fj
		mov	[eax], dl
		mov	esi, [edi+8]

loc_A1D9C3:				; CODE XREF: sub_A1D969+53j
		lea	edi, [ebx+10h]
		push	3Ch
		pop	ecx
		rep movsd
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	esi, [ebp+var_1C]
		mov	eax, [esi+8]
		mov	[ebx+140h], eax
		mov	eax, [ebx+34h]
		mov	ecx, eax
		and	ecx, 0Fh
		mov	[ebx+8], ecx
		shr	eax, 4
		and	eax, 0Fh
		mov	[ebx+0Ch], eax
		xor	eax, eax
		inc	eax
		cmp	ecx, eax
		jnz	loc_A1DAC9
		mov	[ebp+ms_exc.disabled], eax
		mov	eax, [esi+8]
		lea	edi, [eax+0F8h]
		mov	ecx, ds:_MmUserProbeAddress
		cmp	edi, ecx
		ja	short loc_A1DA17
		cmp	edi, eax
		jnb	short loc_A1DA1C

loc_A1DA17:				; CODE XREF: sub_A1D969+A8j
		mov	[ecx], dl
		mov	eax, [esi+8]

loc_A1DA1C:				; CODE XREF: sub_A1D969+ACj
		push	3Eh
		pop	ecx
		mov	esi, eax
		lea	edi, [ebx+10h]
		rep movsd
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	edi, [ebx+48h]
		and	edi, 0FFFFFFFh
		jbe	loc_A1D994
		mov	esi, [ebp+var_1C]

loc_A1DA3F:				; CODE XREF: sub_A1D969+179j
		mov	eax, [esi+8]
		mov	ecx, [eax+28h]
		mov	esi, 0FFFFFFFh
		and	ecx, esi
		mov	eax, [ebx+140h]
		sub	eax, ecx
		mov	[ebx], eax
		mov	[ebx+4], edx
		mov	eax, [ebx+3Ch]
		mov	ecx, 1000h
		cmp	eax, ecx
		ja	short loc_A1DA67
		mov	eax, ecx

loc_A1DA67:				; CODE XREF: sub_A1D969+FAj
		mov	[ebx+13Ch], eax
		mov	ecx, [ebx+4Ch]
		mov	eax, [ebx]
		mov	[ebp+var_1C], eax
		mov	eax, [ebx+44h]
		and	eax, esi
		mov	[ebp+var_24], eax
		and	ecx, esi
		jz	short loc_A1DAED
		mov	eax, [ebx+50h]
		and	eax, esi
		mov	[ebp+var_28], eax
		add	eax, 10h
		mov	[ebx+130h], eax
		mov	[ebx+12Ch], edi
		mov	eax, [ebp+var_24]
		mov	[ebx+128h], eax
		add	eax, [ebp+var_1C]
		mov	[ebx+124h], eax
		mov	eax, ecx
		mov	edi, [ebp+var_28]
		jmp	short loc_A1DAEF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DAB1:				; DATA XREF: .text:006AAC38o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_20], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DAC1:				; DATA XREF: .text:006AAC3Co
		mov	edx, [ebp+var_20]
		jmp	loc_A1DB60
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DAC9:				; CODE XREF: sub_A1D969+8Ej
		call	sub_597FFE
		xor	edx, edx
		cmp	[ebx+8], edx
		jnz	loc_A1D994
		mov	edi, [ebx+48h]
		and	edi, 0FFFFFFFh
		ja	loc_A1DA3F
		jmp	loc_A1D994
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DAED:				; CODE XREF: sub_A1D969+116j
		mov	ecx, eax

loc_A1DAEF:				; CODE XREF: sub_A1D969+146j
		add	eax, [ebp+var_1C]
		mov	ebx, [ebp+arg_0]
		mov	dword ptr [ebx+11Ch], 10h
		mov	[ebx+118h], edi
		mov	[ebx+114h], ecx
		mov	[ebx+110h], eax
		cmp	dword ptr [ebx+8], 1
		jnz	short loc_A1DB3C
		mov	ecx, [ebx+100h]
		test	[ebx+4Ch], esi
		jz	short loc_A1DB36
		mov	eax, [ebx+104h]
		mov	[ebx+120h], eax
		mov	[ebx+134h], ecx
		jmp	short loc_A1DB3C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DB36:				; CODE XREF: sub_A1D969+1B7j
		mov	[ebx+120h], ecx

loc_A1DB3C:				; CODE XREF: sub_A1D969+1ACj
					; sub_A1D969+1CBj
		lea	eax, [edi+10h]
		add	eax, [ebx+12Ch]
		mov	[ebx+138h], eax
		jmp	short loc_A1DB6A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DB4D:				; DATA XREF: .text:006AAC2Co
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_2C], eax
		call	_ExSystemExceptionFilter@0 ; ExSystemExceptionFilter()
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DB5D:				; DATA XREF: .text:006AAC30o
		mov	edx, [ebp+var_2C]

loc_A1DB60:				; CODE XREF: sub_A1D969+15Bj
		mov	esp, [ebp+ms_exc.old_esp]
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh

loc_A1DB6A:				; CODE XREF: sub_A1D969+30j
					; sub_A1D969+1E2j
		mov	eax, edx
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1D969	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1DB7E	proc near		; CODE XREF: sub_A1B24A+1Bp
					; sub_A1B814+AAp ...

arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_C]
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, edx
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_A1DBA5
		mov	edx, [ebp+arg_4]
		lea	eax, [ebp+arg_C]
		push	eax
		push	0
		push	[ebp+arg_8]
		call	WbFindLookupEntry
		mov	eax, [ebp+arg_C]

loc_A1DBA5:				; CODE XREF: sub_A1DB7E+11j
		push	eax
		push	ecx
		mov	edx, edi
		mov	ecx, esi
		call	sub_A1DBB6
		pop	edi
		pop	esi
		pop	ebp
		retn	10h
sub_A1DB7E	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1DBB6	proc near		; CODE XREF: sub_A1DB7E+2Dp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		mov	esi, ecx
		mov	[ebp+var_18], edx
		xor	eax, eax
		lea	ecx, [ebp+var_C]
		push	edi
		mov	[ebp+var_C], eax
		mov	ebx, [esi+8]
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], eax
		mov	eax, [esi]
		mov	edx, eax
		push	ecx
		mov	ecx, ebx
		mov	[ebp+var_10], eax
		mov	[ebp+var_14], ebx
		call	?RtlULongMult@@YGJKKPAK@Z ; RtlULongMult(ulong,ulong,ulong *)
		mov	edi, eax
		test	edi, edi
		js	loc_A1DC9A
		mov	edx, [esi+10h]
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, ebx
		call	?RtlULongAdd@@YGJKKPAK@Z ; RtlULongAdd(ulong,ulong,ulong *)
		mov	edi, eax
		test	edi, edi
		js	loc_A1DC9A
		mov	edx, [ebp+var_10]
		lea	eax, [ebp+var_8]
		mov	ecx, [ebp+var_4]
		push	eax
		call	?RtlULongMult@@YGJKKPAK@Z ; RtlULongMult(ulong,ulong,ulong *)
		mov	edi, eax
		test	edi, edi
		js	short loc_A1DC9A
		mov	ebx, [esi+4]
		mov	ecx, [ebp+var_14]
		lea	eax, [ebx+1]
		cmp	eax, ecx
		jb	short loc_A1DC50
		mov	edx, [ebp+var_C]
		lea	ecx, [esi+0Ch]
		push	ecx
		push	[ebp+var_8]
		mov	ecx, [ecx]
		call	sub_A1B037
		mov	edi, eax
		test	edi, edi
		js	short loc_A1DC9A
		mov	eax, [esi+10h]
		add	[esi+8], eax
		mov	ecx, [esi+8]
		mov	ebx, [esi+4]

loc_A1DC50:				; CODE XREF: sub_A1DBB6+75j
		mov	eax, [ebp+arg_4]
		cmp	eax, ebx
		ja	short loc_A1DC95
		test	ecx, ecx
		jz	short loc_A1DC95
		mov	edx, [esi]
		sub	ebx, eax
		mov	ecx, [esi+0Ch]
		mov	eax, edx
		imul	ebx, edx
		push	ebx		; size_t
		mov	ebx, [ebp+arg_4]
		imul	eax, ebx
		add	eax, ecx
		push	eax		; void *
		lea	eax, [ebx+1]
		imul	eax, edx
		add	eax, ecx
		push	eax		; void *
		call	_memmove
		mov	ecx, [esi]
		add	esp, 0Ch
		inc	dword ptr [esi+4]
		mov	eax, [esi+0Ch]
		mov	edx, [ebp+var_18]
		imul	ecx, ebx
		mov	[ecx+eax], edx
		jmp	short loc_A1DC9A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DC95:				; CODE XREF: sub_A1DBB6+9Fj
					; sub_A1DBB6+A3j
		mov	edi, 0C000000Dh

loc_A1DC9A:				; CODE XREF: sub_A1DBB6+37j
					; sub_A1DBB6+4Fj ...
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1DBB6	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1DCA3	proc near		; CODE XREF: sub_A1B40A:loc_A1B447p
					; sub_A1B40A+68p ...
		mov	edi, edi
		push	esi
		mov	esi, ecx
		test	esi, esi
		jz	short loc_A1DCC9
		mov	eax, [esi+0Ch]
		test	eax, eax
		jz	short loc_A1DCBE
		push	42524157h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1DCBE:				; CODE XREF: sub_A1DCA3+Ej
		xor	eax, eax
		mov	[esi+0Ch], eax
		mov	[esi+4], eax
		mov	[esi+8], eax

loc_A1DCC9:				; CODE XREF: sub_A1DCA3+7j
		pop	esi
		retn
sub_A1DCA3	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1DCCB	proc near		; CODE XREF: WbRemoveWarbirdProcess+17E363p
					; sub_A1C136+81p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		xor	ebx, ebx
		push	edi
		mov	edi, ecx
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_A1DCF7
		lea	eax, [ebp+arg_4]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		call	WbFindLookupEntry
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1DD20
		mov	esi, [ebp+arg_4]

loc_A1DCF7:				; CODE XREF: sub_A1DCCB+12j
		mov	eax, [edi+4]
		mov	edx, [edi]
		sub	eax, esi
		mov	ecx, [edi+0Ch]
		dec	eax
		imul	eax, edx
		push	eax		; size_t
		lea	eax, [esi+1]
		imul	eax, edx
		imul	edx, esi
		add	eax, ecx
		push	eax		; void *
		add	edx, ecx
		push	edx		; void *
		call	_memmove
		add	esp, 0Ch
		dec	dword ptr [edi+4]

loc_A1DD20:				; CODE XREF: sub_A1DCCB+27j
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		pop	ebp
		retn	0Ch
sub_A1DCCB	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1DD29	proc near		; CODE XREF: sub_A1DFF5+E2p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		mov	ebx, edx
		xor	esi, esi
		push	edi
		lea	edx, [ebp+var_4]
		mov	[ebp+var_4], esi
		mov	ecx, 420h
		call	sub_A1ACD8
		mov	edi, eax
		test	edi, edi
		js	loc_A1DE02
		mov	eax, [ebp+var_4]
		push	400h		; size_t
		push	0		; int
		mov	[eax], esi
		lea	ecx, [eax+4]
		mov	dword ptr [ecx], 10000h
		lea	edi, [eax+41Ch]
		mov	[ebp+var_8], ecx
		lea	ecx, [eax+0Ch]
		mov	[ecx], esi
		mov	[ebp+var_14], ecx
		lea	ecx, [eax+10h]
		mov	eax, large fs:124h
		mov	[ecx], esi
		mov	[edi], esi
		mov	esi, [ebp+var_4]
		mov	eax, [eax+80h]
		mov	[ebp+var_10], ecx
		mov	[ebp+var_C], edi
		mov	[esi+8], eax
		lea	eax, [esi+18h]
		and	dword ptr [esi+418h], 0
		push	eax		; void *
		call	_memset
		add	esp, 0Ch
		xor	eax, eax
		mov	edx, esi
		or	ecx, 0FFFFFFFFh
		push	edi
		push	2
		push	20000000h
		push	eax
		push	eax
		push	eax
		push	20h
		push	1000h
		push	[ebp+var_8]
		call	MmAllocateVirtualMemory
		mov	edi, eax
		test	edi, edi
		js	short loc_A1DE05
		mov	eax, [ebp+var_C]
		cmp	dword ptr [eax], 0
		jnz	short loc_A1DDE0
		mov	edi, 0C00000E5h
		jmp	short loc_A1DE05
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DDE0:				; CODE XREF: sub_A1DD29+AEj
		mov	eax, [ebp+var_8]
		mov	ecx, [esi]
		mov	edx, [eax]
		push	[ebp+var_10]
		push	[ebp+var_14]
		call	sub_A1AF61
		mov	edi, eax
		test	edi, edi
		js	short loc_A1DE05
		test	ebx, ebx
		jz	short loc_A1DE05
		mov	[ebx], esi
		xor	esi, esi
		jmp	short loc_A1DE05
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DE02:				; CODE XREF: sub_A1DD29+23j
		mov	esi, [ebp+var_4]

loc_A1DE05:				; CODE XREF: sub_A1DD29+A6j
					; sub_A1DD29+B5j ...
		mov	ecx, esi
		call	sub_A1E255
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1DD29	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1DE13	proc near		; CODE XREF: sub_A1DFF5+90p
					; sub_A1DFF5+FDp

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		xor	esi, esi
		push	edi
		mov	edi, ecx
		test	edx, edx
		jz	short loc_A1DE69
		lea	ebx, [edx+3Fh]
		xor	ecx, ecx
		shr	ebx, 6
		mov	esi, 3FFh
		inc	ecx
		sub	esi, ebx
		call	ExGenRandom
		and	eax, 7FFFFFFFh
		lea	ecx, [esi+1]
		xor	edx, edx
		div	ecx
		push	ebx
		mov	eax, edx
		mov	ecx, edi
		push	esi
		mov	[ebp+var_4], eax
		call	sub_A1DE7B
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A1DE69
		push	ebx
		push	[ebp+var_4]
		xor	edx, edx
		mov	ecx, edi
		call	sub_A1DE7B
		mov	esi, eax

loc_A1DE69:				; CODE XREF: sub_A1DE13+10j
					; sub_A1DE13+45j
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1DE72
		mov	[eax], esi

loc_A1DE72:				; CODE XREF: sub_A1DE13+5Bj
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_A1DE13	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1DE7B	proc near		; CODE XREF: sub_A1DE13+3Cp
					; sub_A1DE13+4Fp

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, large fs:124h
		push	ebx
		push	esi
		push	edi
		dec	word ptr [eax+13Eh]
		mov	edi, edx
		mov	[ebp+var_4], ecx
		nop
		lea	ebx, [ecx+418h]
		xor	edx, edx
		push	0
		mov	ecx, ebx
		mov	[ebp+var_8], ebx
		call	KeAbPreAcquire
		push	11h
		mov	esi, eax
		xor	eax, eax
		pop	ecx
		lock cmpxchg [ebx], ecx
		test	eax, eax
		jz	short loc_A1DEC6
		push	ebx
		mov	edx, esi
		mov	ecx, ebx
		call	ExfAcquirePushLockSharedEx

loc_A1DEC6:				; CODE XREF: sub_A1DE7B+3Fj
		test	esi, esi
		jz	short loc_A1DECE
		or	byte ptr [esi+0Eh], 1

loc_A1DECE:				; CODE XREF: sub_A1DE7B+4Dj
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_4]
		inc	eax
		mov	ebx, [ebp+arg_4]
		or	esi, 0FFFFFFFFh
		mov	[ebp+arg_0], eax
		jmp	short loc_A1DEE8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DEE0:				; CODE XREF: sub_A1DE7B+6Fj
		cmp	byte ptr [ecx+edi+18h],	0
		jz	short loc_A1DEEE
		inc	edi

loc_A1DEE8:				; CODE XREF: sub_A1DE7B+63j
					; sub_A1DE7B+8Dj
		cmp	edi, eax
		jb	short loc_A1DEE0
		mov	edi, esi

loc_A1DEEE:				; CODE XREF: sub_A1DE7B+6Aj
		cmp	edi, esi
		jz	short loc_A1DF0A
		lea	eax, [ebx-1]
		push	eax
		lea	edx, [edi+1]
		call	sub_A1E232
		cmp	eax, esi
		jz	short loc_A1DF0A
		lea	edi, [eax+1]
		mov	eax, [ebp+arg_0]
		jmp	short loc_A1DEE8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DF0A:				; CODE XREF: sub_A1DE7B+75j
					; sub_A1DE7B+85j
		mov	ebx, [ebp+var_8]
		xor	ecx, ecx
		push	11h
		pop	eax
		lock cmpxchg [ebx], ecx
		cmp	eax, 11h
		jz	short loc_A1DF22
		mov	ecx, ebx
		call	@ExfReleasePushLockShared@4 ; ExfReleasePushLockShared(x)

loc_A1DF22:				; CODE XREF: sub_A1DE7B+9Ej
		mov	ecx, ebx
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		cmp	edi, esi
		jz	loc_A1DFEA
		mov	eax, large fs:124h
		dec	word ptr [eax+13Eh]
		nop
		xor	esi, esi
		xor	edx, edx
		push	esi
		mov	ecx, ebx
		call	KeAbPreAcquire
		mov	[ebp+arg_0], eax
		lock bts dword ptr [ebx], 0
		jnb	short loc_A1DF6E
		push	ebx
		mov	edx, eax
		mov	ecx, ebx
		call	ExfAcquirePushLockExclusiveEx
		mov	eax, [ebp+arg_0]

loc_A1DF6E:				; CODE XREF: sub_A1DE7B+E4j
		test	eax, eax
		jz	short loc_A1DF76
		or	byte ptr [eax+0Eh], 1

loc_A1DF76:				; CODE XREF: sub_A1DE7B+F5j
		push	[ebp+arg_4]
		mov	ecx, [ebp+var_4]
		mov	edx, edi
		call	sub_A1E232
		or	ecx, 0FFFFFFFFh
		cmp	eax, ecx
		jnz	short loc_A1DFC2
		mov	esi, [ebp+var_4]
		mov	eax, edi
		shl	eax, 6
		add	eax, [esi+10h]
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jz	short loc_A1DFB4
		dec	eax
		push	eax		; size_t
		lea	eax, [esi+18h]
		add	eax, edi
		push	2		; int
		push	eax		; void *
		call	_memset
		add	esp, 0Ch
		or	ecx, 0FFFFFFFFh

loc_A1DFB4:				; CODE XREF: sub_A1DE7B+122j
		mov	edx, [ebp+arg_4]
		lea	eax, [edi+esi]
		mov	esi, [ebp+arg_0]
		mov	byte ptr [eax+edx+17h],	1

loc_A1DFC2:				; CODE XREF: sub_A1DE7B+10Dj
		lock xadd [ebx], ecx
		and	cl, 6
		cmp	cl, 2
		jnz	short loc_A1DFD5
		mov	ecx, ebx
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1DFD5:				; CODE XREF: sub_A1DE7B+151j
		mov	ecx, ebx
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		jmp	short loc_A1DFEC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1DFEA:				; CODE XREF: sub_A1DE7B+BCj
		xor	esi, esi

loc_A1DFEC:				; CODE XREF: sub_A1DE7B+16Dj
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1DE7B	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1DFF5	proc near		; CODE XREF: sub_A1CBC6+1C1p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		mov	esi, ecx
		mov	eax, edx
		xor	ecx, ecx
		mov	[ebp+var_14], eax
		and	[ebp+var_4], ecx
		xor	ebx, ebx
		push	edi
		xor	edi, edi
		mov	[ebp+var_8], esi
		mov	[ebp+var_18], ecx
		mov	[ebp+var_C], ebx
		cmp	eax, 10000h
		jbe	short loc_A1E02A
		mov	edi, 0C000000Dh
		jmp	loc_A1E18C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E02A:				; CODE XREF: sub_A1DFF5+29j
		call	_KeEnterGuardedRegion@0	; KeEnterGuardedRegion()
		sub	esi, 0FFFFFF80h
		xor	edx, edx
		push	0
		mov	ecx, esi
		call	KeAbPreAcquire
		mov	edx, eax
		xor	eax, eax
		push	11h
		mov	[ebp+var_10], edx
		pop	ecx
		lock cmpxchg [esi], ecx
		test	eax, eax
		jz	short loc_A1E05A
		push	esi
		mov	ecx, esi
		call	ExfAcquirePushLockSharedEx
		mov	edx, [ebp+var_10]

loc_A1E05A:				; CODE XREF: sub_A1DFF5+58j
		test	edx, edx
		jz	short loc_A1E062
		or	byte ptr [edx+0Eh], 1

loc_A1E062:				; CODE XREF: sub_A1DFF5+67j
		mov	edx, [ebp+var_8]
		xor	eax, eax
		mov	[ebp+var_10], eax
		cmp	[edx+6Ch], eax
		jbe	short loc_A1E0A8

loc_A1E06F:				; CODE XREF: sub_A1DFF5+B1j
		mov	ecx, [edx+68h]
		imul	ecx, eax
		mov	eax, [edx+74h]
		mov	edx, [ebp+var_14]
		mov	ecx, [ecx+eax]
		lea	eax, [ebp+var_4]
		push	eax
		mov	[ebp+var_18], ecx
		call	sub_A1DE13
		mov	edi, eax
		test	edi, edi
		js	loc_A1E18C
		cmp	[ebp+var_4], ebx
		jnz	short loc_A1E0A8
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_8]
		inc	eax
		mov	[ebp+var_10], eax
		cmp	eax, [edx+6Ch]
		jb	short loc_A1E06F

loc_A1E0A8:				; CODE XREF: sub_A1DFF5+78j
					; sub_A1DFF5+A2j
		push	11h
		xor	ecx, ecx
		pop	eax
		lock cmpxchg [esi], ecx
		cmp	eax, 11h
		jz	short loc_A1E0BD
		mov	ecx, esi
		call	@ExfReleasePushLockShared@4 ; ExfReleasePushLockShared(x)

loc_A1E0BD:				; CODE XREF: sub_A1DFF5+BFj
		mov	ecx, esi
		call	KeAbPostRelease
		call	_KeLeaveGuardedRegion@0	; KeLeaveGuardedRegion()
		mov	ecx, [ebp+var_4]
		test	ecx, ecx
		jnz	loc_A1E170
		lea	edx, [ebp+var_C]
		call	sub_A1DD29
		mov	ebx, [ebp+var_C]
		mov	edi, eax
		test	edi, edi
		js	loc_A1E18C
		mov	edx, [ebp+var_14]
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, ebx
		call	sub_A1DE13
		mov	edi, eax
		test	edi, edi
		js	loc_A1E18C
		call	_KeEnterGuardedRegion@0	; KeEnterGuardedRegion()
		push	0
		xor	edx, edx
		mov	ecx, esi
		call	KeAbPreAcquire
		mov	edi, eax
		lock bts dword ptr [esi], 0
		jnb	short loc_A1E124
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockExclusiveEx

loc_A1E124:				; CODE XREF: sub_A1DFF5+123j
		test	edi, edi
		jz	short loc_A1E12C
		or	byte ptr [edi+0Eh], 1

loc_A1E12C:				; CODE XREF: sub_A1DFF5+131j
		push	0FFFFFFFFh
		push	4
		push	dword ptr [ebx+10h]
		mov	edx, ebx
		push	ecx
		mov	ecx, [ebp+var_8]
		add	ecx, 68h
		call	sub_A1DB7E
		mov	edi, eax
		or	eax, 0FFFFFFFFh
		lock xadd [esi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1E157
		mov	ecx, esi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1E157:				; CODE XREF: sub_A1DFF5+159j
		mov	ecx, esi
		call	KeAbPostRelease
		call	_KeLeaveGuardedRegion@0	; KeLeaveGuardedRegion()
		test	edi, edi
		js	short loc_A1E18C
		mov	ecx, [ebp+var_4]
		mov	edx, ebx
		xor	ebx, ebx
		jmp	short loc_A1E173
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E170:				; CODE XREF: sub_A1DFF5+D9j
		mov	edx, [ebp+var_18]

loc_A1E173:				; CODE XREF: sub_A1DFF5+179j
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A1E17C
		mov	[eax], ecx

loc_A1E17C:				; CODE XREF: sub_A1DFF5+183j
		mov	esi, [ebp+arg_4]
		test	esi, esi
		jz	short loc_A1E18C
		mov	eax, [edx]
		sub	eax, [edx+10h]
		add	eax, ecx
		mov	[esi], eax

loc_A1E18C:				; CODE XREF: sub_A1DFF5+30j
					; sub_A1DFF5+99j ...
		mov	ecx, ebx
		call	sub_A1E255
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_A1DFF5	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E19C	proc near		; DATA XREF: sub_A1B2D2+78o

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jnz	short loc_A1E1B2
		cmp	[ebp+arg_4], eax
		jz	short loc_A1E1D0
		inc	eax
		xor	edx, edx
		jmp	short loc_A1E1DB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E1B2:				; CODE XREF: sub_A1E19C+Aj
		mov	ecx, [ebp+arg_4]
		test	ecx, ecx
		jnz	short loc_A1E1C0
		or	eax, 0FFFFFFFFh
		mov	edx, eax
		jmp	short loc_A1E1DB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E1C0:				; CODE XREF: sub_A1E19C+1Bj
		mov	edx, [eax+10h]
		cmp	ecx, edx
		jb	short loc_A1E1D6
		mov	eax, [eax+4]
		add	eax, edx
		cmp	ecx, eax
		jnb	short loc_A1E1D6

loc_A1E1D0:				; CODE XREF: sub_A1E19C+Fj
		xor	edx, edx
		mov	eax, edx
		jmp	short loc_A1E1DB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E1D6:				; CODE XREF: sub_A1E19C+29j
					; sub_A1E19C+32j
		sub	ecx, edx
		mov	eax, ecx
		cdq

loc_A1E1DB:				; CODE XREF: sub_A1E19C+14j
					; sub_A1E19C+22j ...
		pop	ebp
		retn	0Ch
sub_A1E19C	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E1DF	proc near		; CODE XREF: sub_A1E2D0+5Fp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, ecx
		mov	ecx, [ebp+arg_0]
		sub	edx, [esi+10h]
		shr	edx, 6
		test	edx, edx
		jz	short loc_A1E212
		lea	eax, [edx-1]
		test	eax, eax
		js	short loc_A1E20F
		push	edi
		mov	edi, eax

loc_A1E1FE:				; CODE XREF: sub_A1E1DF+2Dj
		cmp	byte ptr [esi+edi+18h],	2
		jnz	short loc_A1E20E
		lea	eax, [edi-1]
		mov	edi, eax
		test	eax, eax
		jns	short loc_A1E1FE

loc_A1E20E:				; CODE XREF: sub_A1E1DF+24j
		pop	edi

loc_A1E20F:				; CODE XREF: sub_A1E1DF+1Aj
		inc	eax
		jmp	short loc_A1E214
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E212:				; CODE XREF: sub_A1E1DF+13j
		mov	eax, edx

loc_A1E214:				; CODE XREF: sub_A1E1DF+31j
		mov	[ecx], eax
		cmp	byte ptr [edx+esi+18h],	2
		mov	ecx, [ebp+arg_4]
		mov	[ecx], edx
		jnz	short loc_A1E22D

loc_A1E222:				; CODE XREF: sub_A1E1DF+4Cj
		inc	dword ptr [ecx]
		mov	eax, [ecx]
		cmp	byte ptr [eax+esi+18h],	2
		jz	short loc_A1E222

loc_A1E22D:				; CODE XREF: sub_A1E1DF+41j
		pop	esi
		pop	ebp
		retn	8
sub_A1E1DF	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E232	proc near		; CODE XREF: sub_A1DE7B+7Ep
					; sub_A1DE7B+103p

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		add	eax, edx
		jmp	short loc_A1E246
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E23E:				; CODE XREF: sub_A1E232+16j
		cmp	byte ptr [ecx+edx+18h],	0
		jnz	short loc_A1E251
		inc	edx

loc_A1E246:				; CODE XREF: sub_A1E232+Aj
		cmp	edx, eax
		jb	short loc_A1E23E
		or	eax, 0FFFFFFFFh

loc_A1E24D:				; CODE XREF: sub_A1E232+21j
		pop	ebp
		retn	4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E251:				; CODE XREF: sub_A1E232+11j
		mov	eax, edx
		jmp	short loc_A1E24D
sub_A1E232	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1E255	proc near		; CODE XREF: sub_A1B40A+CCp
					; sub_A1DD29+DEp ...
		mov	edi, edi
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		test	esi, esi
		jz	short loc_A1E2CC
		mov	edx, large fs:124h
		xor	ebx, ebx
		mov	eax, [esi+8]
		cmp	eax, [edx+80h]
		jnz	short loc_A1E285
		mov	eax, [esi+41Ch]
		inc	ebx
		test	eax, eax
		jz	short loc_A1E285
		push	eax
		call	_MmUnsecureVirtualMemory@4 ; MmUnsecureVirtualMemory(x)

loc_A1E285:				; CODE XREF: sub_A1E255+1Dj
					; sub_A1E255+28j
		mov	edi, [esi+0Ch]
		test	edi, edi
		jz	short loc_A1E29C
		push	edi
		call	_MmUnlockPages@4 ; MmUnlockPages(x)
		push	edi
		call	_IoFreeMdl@4	; IoFreeMdl(x)
		and	dword ptr [esi+0Ch], 0

loc_A1E29C:				; CODE XREF: sub_A1E255+35j
		and	dword ptr [esi+10h], 0
		cmp	dword ptr [esi], 0
		jz	short loc_A1E2C1
		test	ebx, ebx
		jz	short loc_A1E2BA
		push	8000h
		lea	eax, [esi+4]
		push	eax
		push	esi
		push	0FFFFFFFFh
		call	_ZwFreeVirtualMemory@16	; ZwFreeVirtualMemory(x,x,x,x)

loc_A1E2BA:				; CODE XREF: sub_A1E255+52j
		and	dword ptr [esi], 0
		and	dword ptr [esi+4], 0

loc_A1E2C1:				; CODE XREF: sub_A1E255+4Ej
		push	42524157h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1E2CC:				; CODE XREF: sub_A1E255+9j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_A1E255	endp ; sp = -4


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E2D0	proc near		; CODE XREF: sub_A1E37F+A7p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, large fs:124h
		push	ebx
		push	esi
		push	edi
		dec	word ptr [eax+13Eh]
		mov	ebx, ecx
		mov	[ebp+var_C], edx
		nop
		lea	esi, [ebx+418h]
		xor	edx, edx
		push	0
		mov	ecx, esi
		call	KeAbPreAcquire
		mov	edi, eax
		lock bts dword ptr [esi], 0
		jnb	short loc_A1E312
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockExclusiveEx

loc_A1E312:				; CODE XREF: sub_A1E2D0+36j
		test	edi, edi
		jz	short loc_A1E31A
		or	byte ptr [edi+0Eh], 1

loc_A1E31A:				; CODE XREF: sub_A1E2D0+44j
		mov	edx, [ebp+var_C]
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		xor	edi, edi
		push	eax
		mov	ecx, ebx
		mov	[ebp+var_4], edi
		mov	[ebp+var_8], edi
		call	sub_A1E1DF
		mov	ecx, [ebp+var_4]
		mov	eax, [ebp+var_8]
		cmp	ecx, eax
		jg	short loc_A1E351
		sub	eax, ecx
		inc	eax
		push	eax		; size_t
		lea	eax, [ecx+18h]
		add	eax, ebx
		push	edi		; int
		push	eax		; void *
		call	_memset
		add	esp, 0Ch

loc_A1E351:				; CODE XREF: sub_A1E2D0+6Cj
		or	eax, 0FFFFFFFFh
		lock xadd [esi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1E365
		mov	ecx, esi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1E365:				; CODE XREF: sub_A1E2D0+8Cj
		mov	ecx, esi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn
sub_A1E2D0	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E37F	proc near		; CODE XREF: sub_A1D1FE+10p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, large fs:124h
		push	ebx
		push	esi
		xor	ebx, ebx
		mov	[ebp+var_8], edx
		dec	word ptr [eax+13Eh]
		push	edi
		mov	[ebp+var_C], ecx
		nop
		lea	esi, [ecx+80h]
		xor	edx, edx
		push	ebx
		mov	ecx, esi
		call	KeAbPreAcquire
		push	11h
		mov	edi, eax
		xor	eax, eax
		pop	ecx
		lock cmpxchg [esi], ecx
		test	eax, eax
		jz	short loc_A1E3C9
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockSharedEx

loc_A1E3C9:				; CODE XREF: sub_A1E37F+3Ej
		test	edi, edi
		jz	short loc_A1E3D1
		or	byte ptr [edi+0Eh], 1

loc_A1E3D1:				; CODE XREF: sub_A1E37F+4Cj
		mov	ecx, [ebp+var_C]
		lea	eax, [ebp+var_10]
		mov	edx, [ebp+var_8]
		add	ecx, 68h
		push	eax
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], ebx
		push	eax
		push	4
		call	WbFindLookupEntry
		mov	edi, eax
		test	edi, edi
		js	short loc_A1E3F5
		mov	ebx, [ebp+var_4]

loc_A1E3F5:				; CODE XREF: sub_A1E37F+71j
		push	11h
		xor	edx, edx
		pop	eax
		lock cmpxchg [esi], edx
		cmp	eax, 11h
		jz	short loc_A1E40A
		mov	ecx, esi
		call	@ExfReleasePushLockShared@4 ; ExfReleasePushLockShared(x)

loc_A1E40A:				; CODE XREF: sub_A1E37F+82j
		mov	ecx, esi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		test	edi, edi
		js	short loc_A1E42D
		mov	edx, [ebp+var_8]
		mov	ecx, ebx
		call	sub_A1E2D0
		mov	edi, eax

loc_A1E42D:				; CODE XREF: sub_A1E37F+A0j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1E37F	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E434	proc near		; CODE XREF: sub_A1E613+E5p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		push	0FFFFFFFFh
		mov	esi, edx
		push	4
		push	dword ptr [esi]
		push	ecx
		add	ecx, 30h
		call	sub_A1DB7E
		mov	edi, eax
		mov	[ebp+var_8], edi
		test	edi, edi
		js	short loc_A1E480
		lea	edi, [esi+8]

loc_A1E45B:				; CODE XREF: sub_A1E434+42j
					; sub_A1E434+47j
		mov	esi, [edi]
		mov	ebx, esi
		mov	edx, [edi+4]
		add	ebx, 1
		mov	ecx, edx
		mov	[ebp+var_4], edx
		adc	ecx, 0
		mov	eax, esi
		nop
		lock cmpxchg8b qword ptr [edi]
		cmp	eax, esi
		jnz	short loc_A1E45B
		cmp	edx, [ebp+var_4]
		jnz	short loc_A1E45B
		mov	edi, [ebp+var_8]

loc_A1E480:				; CODE XREF: sub_A1E434+22j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1E434	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E489	proc near		; CODE XREF: sub_A1E613+A0p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], edx
		mov	esi, 2F0h
		mov	[ebp+var_C], ecx
		lea	edx, [ebp+var_4]
		xor	edi, edi
		mov	ecx, esi
		mov	[ebp+var_4], edi
		call	sub_A1ACD8
		mov	ebx, eax
		test	ebx, ebx
		js	short loc_A1E4E5
		push	esi		; size_t
		mov	esi, [ebp+var_4]
		push	edi		; int
		push	esi		; void *
		call	_memset
		mov	eax, [ebp+var_8]
		add	esp, 0Ch
		add	dword ptr [esi+8], 1
		adc	[esi+0Ch], edi
		mov	[esi], eax
		mov	eax, [ebp+arg_0]
		mov	[esi+10h], edi
		mov	[esi+14h], edi
		mov	[esi+18h], edi
		mov	dword ptr [esi+1Ch], 0Ah
		mov	[eax], esi
		jmp	short loc_A1E4E8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E4E5:				; CODE XREF: sub_A1E489+29j
		mov	edi, [ebp+var_4]

loc_A1E4E8:				; CODE XREF: sub_A1E489+5Aj
		mov	ecx, [ebp+var_C]
		mov	edx, edi
		call	sub_A1E4FB
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	4
sub_A1E489	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E4FB	proc near		; CODE XREF: sub_A1B40A+2Dp
					; sub_A1D36F+12Ep ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		mov	eax, edx
		mov	[ebp+var_10], ecx
		xor	esi, esi
		mov	[ebp+var_C], eax
		push	edi
		mov	edi, esi
		test	eax, eax
		jz	short loc_A1E563
		add	eax, 8
		mov	[ebp+var_4], eax

loc_A1E51C:				; CODE XREF: sub_A1E4FB+49j
					; sub_A1E4FB+4Dj
		mov	edx, [eax]
		mov	ebx, edx
		mov	edi, [eax+4]
		sub	ebx, 1
		mov	ecx, edi
		mov	[ebp+var_8], edx
		mov	eax, edx
		sbb	ecx, esi
		mov	edx, edi
		nop
		mov	esi, [ebp+var_4]
		lock cmpxchg8b qword ptr [esi]
		mov	ecx, [ebp+var_8]
		cmp	eax, ecx
		mov	eax, [ebp+var_4]
		push	0
		pop	esi
		jnz	short loc_A1E51C
		cmp	edx, edi
		jnz	short loc_A1E51C
		mov	esi, ecx
		add	esi, 0FFFFFFFFh
		mov	ecx, esi
		adc	edi, 0FFFFFFFFh
		or	ecx, edi
		jnz	short loc_A1E563
		mov	edx, [ebp+var_C]
		mov	ecx, [ebp+var_10]
		call	sub_A1E5D7

loc_A1E563:				; CODE XREF: sub_A1E4FB+19j
					; sub_A1E4FB+5Bj
		mov	edx, edi
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_A1E4FB	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E56C	proc near		; CODE XREF: sub_A1E613+60p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	0
		push	eax
		push	4
		add	ecx, 30h
		call	WbFindLookupEntry
		mov	[ebp+var_C], eax
		test	eax, eax
		js	short locret_A1E5D3
		push	edi
		mov	edi, [ebp+arg_0]
		test	edi, edi
		jz	short loc_A1E5D2
		mov	ecx, [ebp+var_4]
		test	ecx, ecx
		jz	short loc_A1E5D0
		push	ebx
		lea	edi, [ecx+8]
		push	esi

loc_A1E5A3:				; CODE XREF: sub_A1E56C+52j
					; sub_A1E56C+57j
		mov	esi, [edi]
		mov	ebx, esi
		mov	edx, [edi+4]
		add	ebx, 1
		mov	ecx, edx
		mov	[ebp+var_8], edx
		adc	ecx, 0
		mov	eax, esi
		nop
		lock cmpxchg8b qword ptr [edi]
		cmp	eax, esi
		jnz	short loc_A1E5A3
		cmp	edx, [ebp+var_8]
		jnz	short loc_A1E5A3
		mov	ecx, [ebp+var_4]
		mov	edi, [ebp+arg_0]
		mov	eax, [ebp+var_C]
		pop	esi
		pop	ebx

loc_A1E5D0:				; CODE XREF: sub_A1E56C+30j
		mov	[edi], ecx

loc_A1E5D2:				; CODE XREF: sub_A1E56C+29j
		pop	edi

locret_A1E5D3:				; CODE XREF: sub_A1E56C+21j
		leave
		retn	8
sub_A1E56C	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


sub_A1E5D7	proc near		; CODE XREF: sub_A1E4FB+63p
		mov	edi, edi
		push	ebx
		push	esi
		mov	esi, edx
		push	edi
		test	esi, esi
		jnz	short loc_A1E5E6
		xor	edi, edi
		jmp	short loc_A1E60D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E5E6:				; CODE XREF: sub_A1E5D7+9j
		push	0FFFFFFFFh
		call	sub_A1D706
		mov	edi, eax
		test	edi, edi
		js	short loc_A1E60D
		mov	eax, [esi+18h]
		mov	ebx, 42524157h
		test	eax, eax
		jz	short loc_A1E606
		push	ebx
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1E606:				; CODE XREF: sub_A1E5D7+26j
		push	ebx
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1E60D:				; CODE XREF: sub_A1E5D7+Dj
					; sub_A1E5D7+1Aj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_A1E5D7	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

sub_A1E613	proc near		; CODE XREF: sub_A1D36F+94p
					; sub_A1D4C6+18p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, large fs:124h
		push	ebx
		mov	[ebp+var_8], eax
		mov	ebx, ecx
		mov	eax, large fs:124h
		xor	ecx, ecx
		push	esi
		push	edi
		mov	[ebp+var_4], ecx
		dec	word ptr [eax+13Eh]
		nop
		lea	esi, [ebx+48h]
		xor	edx, edx
		push	ecx
		mov	ecx, esi
		call	KeAbPreAcquire
		push	11h
		mov	edi, eax
		xor	eax, eax
		pop	ecx
		lock cmpxchg [esi], ecx
		test	eax, eax
		jz	short loc_A1E661
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockSharedEx

loc_A1E661:				; CODE XREF: sub_A1E613+42j
		test	edi, edi
		jz	short loc_A1E669
		or	byte ptr [edi+0Eh], 1

loc_A1E669:				; CODE XREF: sub_A1E613+50j
		mov	edx, [ebp+var_8]
		lea	eax, [ebp+var_4]
		push	ecx
		push	eax
		mov	ecx, ebx
		call	sub_A1E56C
		push	11h
		mov	edi, eax
		xor	ecx, ecx
		pop	eax
		lock cmpxchg [esi], ecx
		cmp	eax, 11h
		jz	short loc_A1E68F
		mov	ecx, esi
		call	@ExfReleasePushLockShared@4 ; ExfReleasePushLockShared(x)

loc_A1E68F:				; CODE XREF: sub_A1E613+73j
		mov	ecx, esi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)
		cmp	edi, 0C0000272h
		jnz	short loc_A1E726
		mov	edx, [ebp+var_8]
		lea	eax, [ebp+var_4]
		push	eax
		mov	ecx, ebx
		call	sub_A1E489
		mov	edi, eax
		test	edi, edi
		js	short loc_A1E73A
		mov	eax, large fs:124h
		dec	word ptr [eax+13Eh]
		nop
		push	0
		xor	edx, edx
		mov	ecx, esi
		call	KeAbPreAcquire
		mov	edi, eax
		lock bts dword ptr [esi], 0
		jnb	short loc_A1E6EA
		push	esi
		mov	edx, edi
		mov	ecx, esi
		call	ExfAcquirePushLockExclusiveEx

loc_A1E6EA:				; CODE XREF: sub_A1E613+CBj
		test	edi, edi
		jz	short loc_A1E6F2
		or	byte ptr [edi+0Eh], 1

loc_A1E6F2:				; CODE XREF: sub_A1E613+D9j
		mov	edx, [ebp+var_4]
		push	ecx
		mov	ecx, ebx
		call	sub_A1E434
		mov	edi, eax
		or	eax, 0FFFFFFFFh
		lock xadd [esi], eax
		and	al, 6
		cmp	al, 2
		jnz	short loc_A1E713
		mov	ecx, esi
		call	@ExfTryToWakePushLock@4	; ExfTryToWakePushLock(x)

loc_A1E713:				; CODE XREF: sub_A1E613+F7j
		mov	ecx, esi
		call	KeAbPostRelease
		mov	ecx, large fs:124h
		call	_KiLeaveGuardedRegionUnsafe@4 ;	KiLeaveGuardedRegionUnsafe(x)

loc_A1E726:				; CODE XREF: sub_A1E613+95j
		test	edi, edi
		js	short loc_A1E73A
		mov	ecx, [ebp+arg_0]
		test	ecx, ecx
		jz	short loc_A1E73A
		mov	eax, [ebp+var_4]
		mov	[ecx], eax
		xor	eax, eax
		jmp	short loc_A1E73D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E73A:				; CODE XREF: sub_A1E613+A9j
					; sub_A1E613+115j ...
		mov	eax, [ebp+var_4]

loc_A1E73D:				; CODE XREF: sub_A1E613+125j
		mov	edx, eax
		mov	ecx, ebx
		call	sub_A1E4FB
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_A1E613	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbOpenDatabaseEx(x, x, x, x)
_SdbOpenDatabaseEx@16 proc near		; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+F2p

var_10		= dword	ptr -10h
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		xor	eax, eax
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_10]
		mov	ebx, ecx
		stosd
		stosd
		stosd
		mov	eax, ebx
		test	ebx, ebx
		jnz	short loc_A1E76F
		mov	eax, offset ??_C@_11LOCGONAA@@NNGAKEGL@

loc_A1E76F:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+19j
		push	eax
		xor	edi, edi
		push	edi
		push	(offset	loc_8C2487+1)
		push	382h
		push	offset ??_C@_0BC@OLOFFDGE@SdbOpenDatabaseEx@NNGAKEGL@
		push	3
		call	AslLogCallPrintf
		add	esp, 14h
		mov	edx, 0A58h
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	esi, eax
		mov	[ebp+var_4], esi
		test	esi, esi
		jnz	short loc_A1E7BD
		push	offset ??_C@_0CA@IINJBIKG@Failed?5to?5allocate?5DB?5structure@NNGAKEGL@
		push	38Ah
		push	offset ??_C@_0BC@OLOFFDGE@SdbOpenDatabaseEx@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A1E900
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E7BD:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+4Ej
		push	0A58h		; size_t
		push	edi		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		mov	edx, ebx
		mov	ecx, esi
		push	edi
		push	edi
		push	edi
		call	AslFileMappingCreate
		test	eax, eax
		jns	short loc_A1E7FB
		push	eax
		push	(offset	loc_8C23D9+7)
		push	395h

loc_A1E7E7:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+EBj
					; SdbOpenDatabaseEx(x,x,x,x)+13Dj
		push	offset ??_C@_0BC@OLOFFDGE@SdbOpenDatabaseEx@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A1E8EA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E7FB:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+8Bj
		mov	ecx, [esi]
		mov	eax, [ecx+14h]
		mov	ebx, [ecx+10h]
		cmp	eax, edi
		ja	loc_A1E8D1
		jb	short loc_A1E81D
		cmp	ebx, 7FFFFFFFh
		ja	loc_A1E8D1
		cmp	eax, edi
		ja	short loc_A1E826

loc_A1E81D:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+BCj
		cmp	ebx, 2Ah
		jb	loc_A1E8D1

loc_A1E826:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+CCj
		call	_AslFileMappingEnsureMappedAs@8	; AslFileMappingEnsureMappedAs(x,x)
		test	eax, eax
		jns	short loc_A1E83C
		push	eax
		push	offset ??_C@_0BH@KGGJNBJB@Failed?5to?5map?5SDB?5?$FL?$CFx?$FN@NNGAKEGL@
		push	3A4h
		jmp	short loc_A1E7E7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E83C:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+DEj
		mov	[esi+8], edi
		mov	[esi+0Ch], ebx
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_A1E84B
		mov	edi, [eax+18h]

loc_A1E84B:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+F7j
		push	0Ch		; size_t
		lea	eax, [ebp+var_10]
		mov	[esi+4], edi
		push	eax		; void *
		xor	edx, edx
		mov	ecx, esi
		call	SdbpReadMappedData
		test	eax, eax
		jnz	short loc_A1E86D
		push	offset ??_C@_0BP@DEIGBGOF@Failed?5to?5read?5database?5header@NNGAKEGL@
		push	3B1h
		jmp	short loc_A1E8DB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E86D:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+110j
		cmp	[ebp+var_8], 66626473h
		jz	short loc_A1E8BE
		cmp	[ebp+var_8], 6662647Ah
		jz	short loc_A1E891
		push	[ebp+var_8]
		push	(offset	loc_8C256B+1)
		push	3BEh
		jmp	loc_A1E7E7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E891:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+12Ej
		push	ecx
		lea	ecx, [ebp+var_4]
		call	_SdbpOpenCompressedDatabase@12 ; SdbpOpenCompressedDatabase(x,x,x)
		test	eax, eax
		jnz	short loc_A1E8B9
		push	offset ??_C@_0DP@MOGONKPB@SdbpOpenCompressedDatabase?5fail@NNGAKEGL@
		push	3C4h
		push	offset ??_C@_0BC@OLOFFDGE@SdbOpenDatabaseEx@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		mov	esi, [ebp+var_4]
		jmp	short loc_A1E8E7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E8B9:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+14Dj
		mov	esi, [ebp+var_4]
		jmp	short loc_A1E8CD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E8BE:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+125j
		push	ecx
		lea	edx, [ebp+var_10]
		mov	ecx, esi
		call	SdbpValidateAndApplyCompatFlags
		test	eax, eax
		jz	short loc_A1E8EA

loc_A1E8CD:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+16Dj
		mov	eax, esi
		jmp	short loc_A1E902
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E8D1:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+B6j
					; SdbOpenDatabaseEx(x,x,x,x)+C4j ...
		push	offset ??_C@_0DD@LMDIBKL@Failed?5to?5open?5SDB?5?9?5File?5size?5@NNGAKEGL@
		push	39Eh

loc_A1E8DB:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+11Cj
		push	offset ??_C@_0BC@OLOFFDGE@SdbOpenDatabaseEx@NNGAKEGL@
		push	1
		call	AslLogCallPrintf

loc_A1E8E7:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+168j
		add	esp, 10h

loc_A1E8EA:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+A7j
					; SdbOpenDatabaseEx(x,x,x,x)+17Cj
		test	esi, esi
		jz	short loc_A1E900
		mov	ecx, [esi]
		call	AslFileMappingDelete
		push	74705041h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1E900:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+69j
					; SdbOpenDatabaseEx(x,x,x,x)+19Dj
		xor	eax, eax

loc_A1E902:				; CODE XREF: SdbOpenDatabaseEx(x,x,x,x)+180j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
_SdbOpenDatabaseEx@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbGetKShimTagRef(x, x)
_SdbGetKShimTagRef@8 proc near		; CODE XREF: KsepDbGetShimInfo(x,x)+7Fp

var_30		= dword	ptr -30h
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		and	[ebp+var_4], 0
		xor	eax, eax
		push	ebx
		push	esi
		push	edi
		push	0Ah
		mov	ebx, ecx
		lea	edi, [ebp+var_30]
		pop	ecx
		rep stosd
		mov	esi, [ebx+4]
		lea	eax, [ebp+var_30]
		push	eax
		push	edx
		push	6001h
		mov	edx, 7025h
		mov	ecx, esi
		call	SdbFindFirstStringIndexedTag
		lea	ecx, [ebp+var_4]
		mov	edx, esi
		push	ecx
		push	eax
		mov	ecx, ebx
		call	SdbTagIDToTagRef
		neg	eax
		pop	edi
		sbb	eax, eax
		and	eax, [ebp+var_4]
		pop	esi
		pop	ebx
		leave
		retn
_SdbGetKShimTagRef@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbQueryDataEx(x, x, x, x, x, x, x)
_SdbQueryDataEx@28 proc	near		; CODE XREF: PiIsDriverBlocked+AFE7Dp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		xor	eax, eax
		push	esi
		mov	[ebp+var_8], eax
		mov	esi, edx
		mov	[ebp+var_4], eax
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		call	SdbTagRefToTagID
		test	eax, eax
		jnz	short loc_A1E99D
		push	esi
		push	offset ??_C@_0CH@KHIGAPEJ@Failed?5to?5convert?5tagref?50x?$CFx?5t@NNGAKEGL@
		push	1AB1h
		push	(offset	loc_8C34A8+2)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		push	57h
		pop	eax
		jmp	short loc_A1E9B6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1E99D:				; CODE XREF: SdbQueryDataEx(x,x,x,x,x,x,x)+25j
		mov	edx, [ebp+var_4]
		lea	eax, [ebp+var_C]
		push	eax		; int
		push	[ebp+arg_C]	; int
		push	[ebp+arg_8]	; void *
		push	[ebp+arg_4]	; int
		push	ecx		; int
		mov	ecx, [ebp+var_8]
		call	_SdbQueryDataExTagID@28	; SdbQueryDataExTagID(x,x,x,x,x,x,x)

loc_A1E9B6:				; CODE XREF: SdbQueryDataEx(x,x,x,x,x,x,x)+44j
		pop	esi
		leave
		retn	14h
_SdbQueryDataEx@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	SdbQueryDataExTagID(int,int,void *,int,int)
_SdbQueryDataExTagID@28	proc near	; CODE XREF: SdbQueryDataEx(x,x,x,x,x,x,x)+5Ap

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	esi
		xor	esi, esi
		mov	[ebp+var_4], ecx
		mov	ebx, edx
		mov	[ebp+var_14], esi
		push	edi
		mov	edi, offset ??_C@_1O@MPKBHDFA@?$AAP?$AAo?$AAl?$AAi?$AAc?$AAy@NNGAKEGL@
		mov	[ebp+var_20], esi
		mov	[ebp+var_1C], esi
		cmp	[ebp+arg_8], esi
		jnz	short loc_A1EA06
		cmp	[ebp+arg_C], esi
		jnz	short loc_A1EA06
		push	offset ??_C@_0DF@DOHFJIJC@One?5of?5lpBuffer?5or?5lpcbBufferSi@NNGAKEGL@
		push	19CAh
		push	offset ??_C@_0BE@BDIMHFPA@SdbQueryDataExTagID@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		push	57h

loc_A1EA00:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+91j
		pop	esi
		jmp	loc_A1ECD9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EA06:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+23j
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+28j
		mov	ecx, edi
		lea	edx, [ecx+2]

loc_A1EA0B:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+59j
		mov	ax, [ecx]
		add	ecx, 2
		cmp	ax, si
		jnz	short loc_A1EA0B
		sub	ecx, edx
		sar	ecx, 1
		push	ecx
		lea	eax, [ecx+1]
		lea	edx, [eax+eax]
		mov	[ebp+var_10], eax
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	[ebp+var_C], eax
		test	eax, eax
		jnz	short loc_A1EA4E
		push	edi
		push	offset ??_C@_0DM@EFDBMOEF@Cannot?5allocate?5temporary?5buffe@NNGAKEGL@
		push	19D6h
		push	offset ??_C@_0BE@BDIMHFPA@SdbQueryDataExTagID@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		push	8
		jmp	short loc_A1EA00
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EA4E:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+73j
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+10Aj
		push	5Ch		; wchar_t
		push	edi		; wchar_t *
		call	_wcschr
		mov	edx, [ebp+var_10]
		mov	[ebp+var_18], eax
		pop	ecx
		pop	ecx
		test	eax, eax
		jnz	short loc_A1EA77
		mov	ecx, [ebp+var_C]
		push	edi
		call	RtlStringCchCopyW
		test	eax, eax
		js	loc_A1ECC9
		mov	edi, esi
		jmp	short loc_A1EAA1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EA77:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+A5j
		sub	eax, edi
		sar	eax, 1
		push	eax
		push	edi
		mov	edi, [ebp+var_C]
		mov	ecx, edi
		mov	[ebp+var_8], eax
		call	RtlStringCchCopyNW
		test	eax, eax
		js	loc_A1ECC9
		mov	eax, [ebp+var_8]
		xor	ecx, ecx
		mov	[edi+eax*2], cx
		mov	edi, [ebp+var_18]
		add	edi, 2

loc_A1EAA1:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+BAj
		push	[ebp+var_C]	; wchar_t *
		mov	ecx, [ebp+var_4]
		mov	edx, ebx
		push	6001h		; int
		push	700Fh		; __int16
		call	_SdbFindFirstNamedTag@20 ; SdbFindFirstNamedTag(x,x,x,x,x)
		mov	ebx, eax
		test	edi, edi
		jz	short loc_A1EAC9
		cmp	[edi], si
		jz	short loc_A1EAC9
		test	ebx, ebx
		jnz	short loc_A1EA4E
		jmp	short loc_A1EACD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EAC9:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+101j
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+106j
		test	ebx, ebx
		jnz	short loc_A1EAD7

loc_A1EACD:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+10Cj
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+1EEj ...
		mov	esi, 490h
		jmp	loc_A1ECCC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EAD7:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+110j
		mov	edi, [ebp+var_4]
		mov	edx, ebx
		push	4018h
		mov	ecx, edi
		mov	[ebp+var_8], esi
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jnz	short loc_A1EB0D
		push	ebx
		push	offset ??_C@_0DD@OJKICILA@The?5entry?50x?$CFx?5does?5not?5have?5va@NNGAKEGL@
		push	1A07h
		push	offset ??_C@_0BE@BDIMHFPA@SdbQueryDataExTagID@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		mov	ecx, esi
		jmp	short loc_A1EB1C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EB0D:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+132j
		push	esi
		mov	edx, eax
		mov	ecx, edi
		call	SdbReadDWORDTag
		mov	ecx, eax
		mov	[ebp+var_8], ecx

loc_A1EB1C:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+150j
		mov	edi, esi
		mov	edx, esi
		test	ecx, ecx
		jz	loc_A1EC81
		mov	eax, ecx
		sub	eax, 1
		jz	short loc_A1EB79
		dec	eax
		sub	eax, 1
		jz	short loc_A1EB72
		sub	eax, 1
		jz	short loc_A1EB6B
		sub	eax, 7
		jz	short loc_A1EB64
		push	ecx
		push	ebx
		push	offset ??_C@_0DH@CJPEJPEJ@The?5entry?50x?$CFx?5contains?5bad?5val@NNGAKEGL@
		push	1A2Ch
		push	offset ??_C@_0BE@BDIMHFPA@SdbQueryDataExTagID@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 18h
		mov	esi, 54Eh
		jmp	loc_A1ECCC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EB64:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+182j
		mov	eax, 5007h
		jmp	short loc_A1EB7E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EB6B:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+17Dj
		mov	eax, 4019h
		jmp	short loc_A1EB7E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EB72:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+178j
		mov	eax, 9005h
		jmp	short loc_A1EB7E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EB79:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+172j
		mov	eax, 601Eh

loc_A1EB7E:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+1AEj
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+1B5j ...
		mov	ecx, [ebp+var_4]
		mov	edx, ebx
		push	eax
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A1EBAE
		push	ebx
		push	offset ??_C@_0CB@GDMDDNIA@The?5entry?50x?$CFx?5contains?5no?5valu@NNGAKEGL@
		push	1A38h
		push	offset ??_C@_0BE@BDIMHFPA@SdbQueryDataExTagID@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A1EACD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EBAE:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+1D2j
		mov	eax, [ebp+var_8]
		sub	eax, 1
		jz	short loc_A1EC2B
		dec	eax
		sub	eax, 1
		jz	short loc_A1EC00
		sub	eax, 1
		jz	short loc_A1EBE7
		sub	eax, 7
		jnz	loc_A1EC78
		mov	ecx, [ebp+var_4]
		mov	edx, edi
		push	esi
		push	esi
		call	SdbReadQWORDTag
		push	8
		mov	[ebp+var_1C], edx
		lea	edx, [ebp+var_20]
		mov	[ebp+var_20], eax
		pop	edi
		jmp	loc_A1EC81
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EBE7:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+204j
		mov	ecx, [ebp+var_4]
		mov	edx, edi
		push	esi
		call	SdbReadDWORDTag
		push	4
		mov	[ebp+var_14], eax
		lea	edx, [ebp+var_14]
		pop	edi
		jmp	loc_A1EC85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EC00:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+1FFj
		mov	ecx, [ebp+var_4]
		mov	edx, edi
		call	SdbGetTagDataSize
		mov	ecx, [ebp+var_4]
		mov	edx, edi
		mov	[ebp+var_10], eax
		call	SdbpGetMappedTagData
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A1EC7E
		push	edi
		push	ebx
		push	(offset	loc_8C34D1+1)
		push	1A56h
		jmp	short loc_A1EC47
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EC2B:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+1F9j
		mov	ecx, [ebp+var_4]
		mov	edx, edi
		call	SdbGetStringTagPtr
		mov	edx, eax
		test	edx, edx
		jnz	short loc_A1EC5B
		push	edi
		push	ebx
		push	offset ??_C@_0CO@JGKJJPEB@The?5entry?50x?$CFx?5contains?5bad?5str@NNGAKEGL@
		push	1A48h

loc_A1EC47:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+26Ej
		push	offset ??_C@_0BE@BDIMHFPA@SdbQueryDataExTagID@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 18h
		jmp	loc_A1EACD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EC5B:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+27Ej
		mov	ecx, edx
		lea	edi, [ecx+2]

loc_A1EC60:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+2AEj
		mov	ax, [ecx]
		add	ecx, 2
		cmp	ax, si
		jnz	short loc_A1EC60
		sub	ecx, edi
		sar	ecx, 1
		lea	edi, ds:2[ecx*2]
		jmp	short loc_A1EC81
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EC78:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+209j
		mov	edi, esi
		mov	edx, esi
		jmp	short loc_A1EC81
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EC7E:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+260j
		mov	edi, [ebp+var_10]

loc_A1EC81:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+167j
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+227j ...
		test	edi, edi
		jz	short loc_A1ECA9

loc_A1EC85:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+240j
		cmp	[ebp+arg_8], esi
		jz	short loc_A1ECA6
		mov	eax, [ebp+arg_C]
		test	eax, eax
		jz	short loc_A1ECA6
		mov	eax, [eax]
		cmp	eax, edi
		jb	short loc_A1ECA6
		push	eax		; size_t
		push	edx		; void *
		push	[ebp+arg_8]	; void *
		call	_memmove
		add	esp, 0Ch
		jmp	short loc_A1ECA9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ECA6:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+2CDj
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+2D4j ...
		push	7Ah
		pop	esi

loc_A1ECA9:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+2C8j
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+2E9j
		mov	eax, [ebp+arg_C]
		test	eax, eax
		jz	short loc_A1ECB2
		mov	[eax], edi

loc_A1ECB2:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+2F3j
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jz	short loc_A1ECBE
		mov	ecx, [ebp+var_8]
		mov	[eax], ecx

loc_A1ECBE:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+2FCj
		mov	eax, [ebp+arg_10]
		test	eax, eax
		jz	short loc_A1ECCC
		mov	[eax], ebx
		jmp	short loc_A1ECCC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ECC9:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+B2j
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+D1j
		push	7Ah
		pop	esi

loc_A1ECCC:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+117j
					; SdbQueryDataExTagID(x,x,x,x,x,x,x)+1A4j ...
		push	74705041h
		push	[ebp+var_C]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1ECD9:				; CODE XREF: SdbQueryDataExTagID(x,x,x,x,x,x,x)+46j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	14h
_SdbQueryDataExTagID@28	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbReadEntryInformation(x, x, x)
_SdbReadEntryInformation@12 proc near	; CODE XREF: PiIsDriverBlocked+AFEF6p

var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 40h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_0]
		and	[ebp+var_34], 0
		and	[ebp+var_38], 0
		push	ebx
		push	esi
		push	edi
		push	0Ah
		mov	esi, ecx
		mov	[ebp+var_3C], eax
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_30]
		rep stosd
		lea	eax, [ebp+var_34]
		mov	ecx, esi
		push	eax
		lea	eax, [ebp+var_38]
		mov	ebx, edx
		push	eax
		call	SdbTagRefToTagID
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A1ED47
		push	ebx
		push	offset ??_C@_0CH@KHIGAPEJ@Failed?5to?5convert?5tagref?50x?$CFx?5t@NNGAKEGL@
		push	1AE9h

loc_A1ED33:				; CODE XREF: SdbReadEntryInformation(x,x,x)+C0j
		push	offset ??_C@_0BI@PGDCLLBH@SdbReadEntryInformation@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A1EE05
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ED47:				; CODE XREF: SdbReadEntryInformation(x,x,x)+44j
		mov	edi, [ebp+var_38]
		mov	ecx, edi
		mov	edx, [ebp+var_34]
		push	9004h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_A1ED82
		push	[ebp+var_34]
		push	offset ??_C@_0CJ@GFAHPFCA@Failed?5to?5read?5TAG_EXE_ID?5for?5t@NNGAKEGL@
		push	1AF3h
		push	offset ??_C@_0BI@PGDCLLBH@SdbReadEntryInformation@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A1ED7B:				; CODE XREF: SdbReadEntryInformation(x,x,x)+E9j
		xor	esi, esi
		jmp	loc_A1EE05
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1ED82:				; CODE XREF: SdbReadEntryInformation(x,x,x)+7Bj
		push	10h		; int
		lea	eax, [ebp+var_30]
		mov	edx, ebx
		push	eax		; void *
		mov	ecx, edi
		call	SdbReadBinaryTag
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A1EDA4
		push	ebx
		push	offset ??_C@_0CH@LFOAJKPD@Failed?5to?5read?5GUID?5referenced?5@NNGAKEGL@
		push	1AFDh
		jmp	short loc_A1ED33
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EDA4:				; CODE XREF: SdbReadEntryInformation(x,x,x)+B3j
		lea	edx, [ebp+var_18]
		mov	ecx, edi
		call	SdbGetDatabaseID
		test	eax, eax
		jnz	short loc_A1EDCD
		push	offset ??_C@_0CE@IBKPPHLF@Failed?5to?5read?5GUID?5of?5the?5data@NNGAKEGL@
		push	1B05h
		push	offset ??_C@_0BI@PGDCLLBH@SdbReadEntryInformation@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A1ED7B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EDCD:				; CODE XREF: SdbReadEntryInformation(x,x,x)+CEj
		lea	edx, [ebp+var_20]
		lea	ecx, [ebp+var_30] ; int
		call	SdbGetEntryFlags
		mov	edx, [ebp+var_34]
		neg	eax
		push	700Fh
		sbb	eax, eax
		mov	ecx, edi
		and	[ebp+var_20], eax
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+var_3C]
		test	eax, eax
		jz	short loc_A1EE02
		push	0Ah
		pop	ecx
		lea	esi, [ebp+var_30]
		mov	edi, eax
		rep movsd

loc_A1EE02:				; CODE XREF: SdbReadEntryInformation(x,x,x)+114j
		xor	esi, esi
		inc	esi

loc_A1EE05:				; CODE XREF: SdbReadEntryInformation(x,x,x)+60j
					; SdbReadEntryInformation(x,x,x)+9Bj
		mov	ecx, [ebp+var_8]
		mov	eax, esi
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	4
_SdbReadEntryInformation@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	SdbpCheckExe(int,int,int,int,int,void *)
_SdbpCheckExe@32 proc near		; CODE XREF: SdbpSearchDB+AF6FAp
					; SdbpSearchDB+AF79Ep ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		push	2
		pop	edi
		lea	eax, [ebp+var_8]
		mov	[ebp+var_4], edi
		push	eax
		lea	eax, [ebp+var_4]
		xor	esi, esi
		push	eax
		push	[ebp+arg_8]
		mov	[ebp+var_8], esi
		push	[ebp+arg_0]
		call	SdbpCheckForMatch
		test	eax, eax
		jz	short loc_A1EE97
		cmp	[ebp+arg_C], 1
		mov	ebx, [ebp+var_4]
		jnz	short loc_A1EE52
		cmp	ebx, edi
		jnz	short loc_A1EE97

loc_A1EE52:				; CODE XREF: SdbpCheckExe(x,x,x,x,x,x,x,x)+34j
		cmp	[ebp+arg_C], edi
		jnz	short loc_A1EE5B
		cmp	ebx, edi
		jz	short loc_A1EE97

loc_A1EE5B:				; CODE XREF: SdbpCheckExe(x,x,x,x,x,x,x,x)+3Dj
		mov	edi, [ebp+arg_4]
		cmp	ebx, 1
		jnz	short loc_A1EEA0
		push	80h		; size_t
		push	esi		; int
		push	[ebp+arg_14]	; void *
		call	_memset
		add	esp, 0Ch
		mov	ecx, esi

loc_A1EE76:				; CODE XREF: SdbpCheckExe(x,x,x,x,x,x,x,x)+8Dj
		mov	edx, [ebp+arg_14]
		xor	esi, esi
		mov	eax, [ebp+arg_0]
		inc	esi
		mov	[edx+ecx*8], eax
		mov	eax, [ebp+var_8]
		mov	[edx+ecx*8+4], eax
		lea	eax, [ecx+1]
		mov	[edi], eax
		mov	eax, [ebp+arg_10]
		test	eax, eax
		jz	short loc_A1EE97
		mov	[eax], ebx

loc_A1EE97:				; CODE XREF: SdbpCheckExe(x,x,x,x,x,x,x,x)+2Bj
					; SdbpCheckExe(x,x,x,x,x,x,x,x)+38j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	18h
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EEA0:				; CODE XREF: SdbpCheckExe(x,x,x,x,x,x,x,x)+49j
		mov	ecx, [edi]
		cmp	ecx, 10h
		jb	short loc_A1EE76
		push	(offset	loc_8C30BD+5)
		push	0FE8h
		push	offset ??_C@_0N@CCNBMNPH@SdbpCheckExe@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		inc	dword ptr [edi]
		jmp	short loc_A1EE97
_SdbpCheckExe@32 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckMatchingDevice(x, x, x, x,	x, x, x)
_SdbpCheckMatchingDevice@28 proc near	; DATA XREF: .text:00404614o

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_4]
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		mov	edi, [eax+3ECh]
		xor	esi, esi
		mov	[ebx], esi
		test	edi, edi
		jnz	short loc_A1EEFB
		push	offset ??_C@_0CD@LALAIDGB@No?5device?5query?5callback?5specif@NNGAKEGL@
		push	89Bh

loc_A1EEEA:				; CODE XREF: SdbpCheckMatchingDevice(x,x,x,x,x,x,x)+55j
					; SdbpCheckMatchingDevice(x,x,x,x,x,x,x)+6Fj
		push	offset ??_C@_0BI@KHBGCKAO@SdbpCheckMatchingDevice@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A1EF47
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EEFB:				; CODE XREF: SdbpCheckMatchingDevice(x,x,x,x,x,x,x)+1Aj
		mov	edx, [ebp+arg_10]
		mov	ecx, [ebp+arg_8]
		push	6001h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jnz	short loc_A1EF1B
		push	offset ??_C@_0BO@FMBINIHJ@Failed?5to?5read?5HWID?5attribute@NNGAKEGL@
		push	8A1h
		jmp	short loc_A1EEEA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EF1B:				; CODE XREF: SdbpCheckMatchingDevice(x,x,x,x,x,x,x)+49j
		mov	ecx, [ebp+arg_8]
		mov	edx, eax
		call	SdbGetStringTagPtr
		test	eax, eax
		jnz	short loc_A1EF35
		push	(offset	loc_8C2F8B+5)
		push	8A7h
		jmp	short loc_A1EEEA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EF35:				; CODE XREF: SdbpCheckMatchingDevice(x,x,x,x,x,x,x)+63j
		push	eax
		call	edi
		mov	ecx, [ebp+arg_14]
		xor	esi, esi
		inc	esi
		mov	[ebx], eax
		test	ecx, ecx
		jz	short loc_A1EF47
		mov	[ecx+28h], esi

loc_A1EF47:				; CODE XREF: SdbpCheckMatchingDevice(x,x,x,x,x,x,x)+35j
					; SdbpCheckMatchingDevice(x,x,x,x,x,x,x)+7Ej
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	1Ch
_SdbpCheckMatchingDevice@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckMatchingDir(x, x, x, x, x,	x, x)
_SdbpCheckMatchingDir@28 proc near	; DATA XREF: .text:004046A4o

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 1Ch
		mov	edx, [ebp+arg_10]
		mov	ecx, [ebp+arg_8]
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		push	6001h
		mov	[esp+2Ch+var_C], edi
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jz	loc_A1F082
		mov	ecx, [ebp+arg_8]
		mov	edx, eax
		call	SdbGetStringTagPtr
		mov	ecx, eax
		mov	[esp+28h+var_10], ecx
		test	ecx, ecx
		jnz	short loc_A1EFAE
		push	offset ??_C@_0CL@CODINPLA@Failed?5to?5get?5the?5string?5from?5t@NNGAKEGL@
		push	0AE2h

loc_A1EF9A:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+8Fj
					; SdbpCheckMatchingDir(x,x,x,x,x,x,x)+168j
		push	offset ??_C@_0BF@OIHNIAP@SdbpCheckMatchingDir@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A1F082
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EFAE:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+3Ej
		mov	esi, ecx
		lea	edx, [esi+2]

loc_A1EFB3:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+6Cj
		mov	ax, [esi]
		add	esi, 2
		cmp	ax, di
		jnz	short loc_A1EFB3
		mov	ebx, [ebp+arg_14]
		sub	esi, edx
		sar	esi, 1
		test	byte ptr [ebx],	1
		jnz	short loc_A1EFE5
		mov	ecx, ebx
		call	SdbpInitializeSearchDBContext
		test	eax, eax
		jnz	short loc_A1EFE1
		push	offset ??_C@_0CF@DDPIMIDA@Failed?5to?5initialize?5SEARCHDBCO@NNGAKEGL@
		push	0AEFh
		jmp	short loc_A1EF9A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1EFE1:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+83j
		mov	ecx, [esp+28h+var_10]

loc_A1EFE5:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+78j
		mov	edx, [ebx+24h]
		mov	[esp+28h+var_4], edx
		mov	[esp+28h+var_14], edi
		cmp	[edx], edi
		jle	short loc_A1F062
		add	edx, 4
		mov	[esp+28h+var_8], edx

loc_A1EFFB:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+110j
		lea	eax, [esp+28h+var_18]
		mov	[esp+28h+var_18], edi
		push	eax		; int
		push	edx		; int
		push	esi		; int
		push	ecx		; void *
		mov	ecx, [ebp+arg_4]
		mov	edx, ebx
		call	SdbpResolveMatchingFile
		test	eax, eax
		jz	loc_A1F0AE
		mov	ecx, [esp+28h+var_18]
		call	_AslDoesDirectoryExistNtPath@4 ; AslDoesDirectoryExistNtPath(x)
		mov	[esp+28h+var_C], eax
		cmp	[esp+28h+var_18], edi
		jz	short loc_A1F03E
		push	74705041h
		push	[esp+2Ch+var_18]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	eax, [esp+28h+var_C]

loc_A1F03E:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+DAj
		test	eax, eax
		mov	eax, [esp+28h+var_14]
		jnz	short loc_A1F0A1
		mov	ecx, [esp+28h+var_4]
		inc	eax
		mov	edx, [esp+28h+var_8]
		add	edx, 18h
		mov	[esp+28h+var_14], eax
		mov	[esp+28h+var_8], edx
		cmp	eax, [ecx]
		mov	ecx, [esp+28h+var_10]
		jl	short loc_A1EFFB

loc_A1F062:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+A2j
					; SdbpCheckMatchingDir(x,x,x,x,x,x,x)+153j ...
		mov	eax, [esp+28h+var_10]
		movzx	eax, word ptr [eax]
		cmp	eax, 25h
		jz	short loc_A1F078
		cmp	eax, 5Ch
		jz	short loc_A1F078
		cmp	eax, 2Eh
		jnz	short loc_A1F07F

loc_A1F078:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+11Cj
					; SdbpCheckMatchingDir(x,x,x,x,x,x,x)+121j
		mov	dword ptr [ebx+28h], 1

loc_A1F07F:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+126j
		xor	edi, edi
		inc	edi

loc_A1F082:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+26j
					; SdbpCheckMatchingDir(x,x,x,x,x,x,x)+59j
		mov	ecx, [ebp+arg_0]
		mov	esi, [esp+28h+var_C]
		mov	[ecx], esi
		call	_Feature_CompatBuildInVb__private_IsEnabledDeviceUsage@0 ; Feature_CompatBuildInVb__private_IsEnabledDeviceUsage()
		test	eax, eax
		mov	eax, edi
		jnz	short loc_A1F098
		mov	eax, esi

loc_A1F098:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+144j
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	1Ch
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F0A1:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+F4j
		test	eax, eax
		jle	short loc_A1F062
		mov	dword ptr [ebx+28h], 1
		jmp	short loc_A1F062
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F0AE:				; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+C3j
		push	(offset	loc_8C309E+4)
		push	0B07h
		jmp	loc_A1EF9A
_SdbpCheckMatchingDir@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckMatchingRegistry(x, x, x, x, x, x,	x)
_SdbpCheckMatchingRegistry@28 proc near	; DATA XREF: .text:004045F4o

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	eax
		mov	edx, [ebp+arg_10]
		lea	eax, [ebp+var_8]
		mov	ecx, [ebp+arg_8]
		xor	esi, esi
		push	eax
		lea	eax, [ebp+var_28]
		mov	[ebp+var_20], esi
		push	eax
		lea	eax, [ebp+var_C]
		mov	dword ptr [ebp+var_1C],	esi
		push	eax
		lea	eax, [ebp+var_10]
		mov	[ebp+var_18], esi
		push	eax
		lea	eax, [ebp+var_14]
		mov	[ebp+var_14], esi
		push	eax
		lea	eax, [ebp+var_18]
		mov	[ebp+var_10], esi
		push	eax
		lea	eax, [ebp+var_1C]
		mov	[ebp+var_C], esi
		push	eax
		mov	[ebp+var_28], esi
		mov	[ebp+var_24], esi
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], esi
		mov	[edi], esi
		call	_SdbpGetRegistryMatchingAttributes@40 ;	SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)
		test	eax, eax
		jnz	short loc_A1F136
		push	offset ??_C@_0CC@POBNGMOF@Failed?5to?5read?5MATCHING_REG?5ent@NNGAKEGL@
		push	678h

loc_A1F125:				; CODE XREF: SdbpCheckMatchingRegistry(x,x,x,x,x,x,x)+ABj
		push	offset ??_C@_0BK@HKIGDGDG@SdbpCheckMatchingRegistry@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A1F178
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F136:				; CODE XREF: SdbpCheckMatchingRegistry(x,x,x,x,x,x,x)+5Cj
		mov	edx, [ebp+var_18] ; int
		lea	eax, [ebp+var_20]
		mov	ecx, dword ptr [ebp+var_1C] ; char
		push	eax		; int
		push	[ebp+var_4]	; int
		push	[ebp+var_8]	; int
		push	[ebp+var_24]	; int
		push	[ebp+var_28]	; int
		push	[ebp+var_C]	; int
		push	[ebp+var_10]	; int
		push	[ebp+var_14]	; int
		call	_SdbpCheckMatchingRegistryEntry@40 ; SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)
		test	eax, eax
		jnz	short loc_A1F16A
		push	offset ??_C@_0CD@CMJHNGOF@Failed?5to?5check?5MATCHING_REG?5en@NNGAKEGL@
		push	689h
		jmp	short loc_A1F125
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F16A:				; CODE XREF: SdbpCheckMatchingRegistry(x,x,x,x,x,x,x)+9Fj
		mov	ecx, [ebp+arg_14]
		xor	esi, esi
		inc	esi
		mov	[ecx+28h], esi
		mov	ecx, [ebp+var_20]
		mov	[edi], ecx

loc_A1F178:				; CODE XREF: SdbpCheckMatchingRegistry(x,x,x,x,x,x,x)+77j
		pop	edi
		mov	eax, esi
		pop	esi
		leave
		retn	1Ch
_SdbpCheckMatchingRegistry@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __fastcall SdbpCheckMatchingRegistryEntry(char,int,int,int,int,int,int,int,int,int)
_SdbpCheckMatchingRegistryEntry@40 proc	near
					; CODE XREF: SdbpCheckMatchingRegistry(x,x,x,x,x,x,x)+98p

var_244		= dword	ptr -244h
var_240		= dword	ptr -240h
var_23C		= dword	ptr -23Ch
var_238		= dword	ptr -238h
var_234		= dword	ptr -234h
var_230		= dword	ptr -230h
var_22C		= dword	ptr -22Ch
var_228		= dword	ptr -228h
var_224		= dword	ptr -224h
var_220		= dword	ptr -220h
var_21C		= dword	ptr -21Ch
var_218		= dword	ptr -218h
var_20C		= word ptr -20Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 244h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_4]
		push	ebx
		mov	ebx, [ebp+arg_1C]
		push	esi
		push	edi
		push	6
		mov	[ebp+var_220], eax
		lea	edi, [ebp+var_244]
		xor	eax, eax
		mov	[ebp+var_224], edx
		mov	edx, ecx
		mov	[ebp+var_20C], ax
		pop	ecx
		rep stosd
		lea	edi, [ebp+var_218]
		xor	esi, esi
		stosd
		push	edx		; char
		push	(offset	loc_8C2B93+1) ;	wchar_t	*
		push	104h		; int
		stosd
		mov	[ebx], esi
		mov	[ebp+var_22C], esi
		mov	[ebp+var_228], esi
		stosd
		lea	eax, [ebp+var_20C]
		push	eax		; wchar_t *
		mov	[ebp+var_21C], esi
		call	RtlStringCchPrintfW
		add	esp, 10h
		test	eax, eax
		jns	short loc_A1F21B
		push	(offset	loc_8C2BBD+1)
		push	591h
		push	(offset	loc_8C2B49+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A1F304
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F21B:				; CODE XREF: SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)+7Bj
		lea	eax, [ebp+var_20C]
		push	eax
		lea	eax, [ebp+var_22C]
		push	eax
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		lea	eax, [ebp+var_22C]
		mov	[ebp+var_244], 18h
		mov	[ebp+var_23C], eax
		lea	eax, [ebp+var_244]
		push	eax
		push	20019h
		lea	eax, [ebp+var_21C]
		mov	[ebp+var_240], esi
		push	eax
		mov	[ebp+var_238], 240h
		mov	[ebp+var_234], esi
		mov	[ebp+var_230], esi
		call	_ZwOpenKey@12	; ZwOpenKey(x,x,x)
		test	eax, eax
		jns	short loc_A1F2D8
		push	esi
		push	0Ch
		lea	eax, [ebp+var_218]
		xor	edi, edi
		push	eax
		inc	edi
		push	edi
		call	_ZwQuerySystemInformation@16 ; ZwQuerySystemInformation(x,x,x,x)
		test	eax, eax
		jns	short loc_A1F2AE
		push	eax
		push	offset ??_C@_0CK@OOILAFO@Failed?5to?5get?5processor?5archite@NNGAKEGL@
		push	5B4h
		push	(offset	loc_8C2B49+1)
		push	edi
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A1F304
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F2AE:				; CODE XREF: SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)+111j
		cmp	word ptr [ebp+var_218],	9
		jz	short loc_A1F2BC

loc_A1F2B8:				; CODE XREF: SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)+156j
		mov	esi, edi
		jmp	short loc_A1F304
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F2BC:				; CODE XREF: SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)+136j
		lea	eax, [ebp+var_244]
		push	eax
		push	20119h
		lea	eax, [ebp+var_21C]
		push	eax
		call	_ZwOpenKey@12	; ZwOpenKey(x,x,x)
		test	eax, eax
		js	short loc_A1F2B8

loc_A1F2D8:				; CODE XREF: SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)+FAj
		mov	edx, [ebp+var_224] ; wchar_t *
		mov	ecx, [ebp+var_21C] ; int
		push	ebx		; int
		push	[ebp+arg_18]	; size_t
		push	[ebp+arg_14]	; void *
		push	[ebp+arg_10]	; int
		push	[ebp+arg_C]	; int
		push	[ebp+arg_8]	; int
		push	[ebp+var_220]	; int
		push	[ebp+arg_0]	; void *
		call	_SdbpCheckMatchingRegistryValue@40 ; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)
		mov	esi, eax

loc_A1F304:				; CODE XREF: SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)+96j
					; SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)+12Cj ...
		cmp	[ebp+var_21C], 0
		jz	short loc_A1F318
		push	[ebp+var_21C]
		call	_ZwClose@4	; ZwClose(x)

loc_A1F318:				; CODE XREF: SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)+18Bj
		mov	ecx, [ebp+var_4]
		mov	eax, esi
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	20h
_SdbpCheckMatchingRegistryEntry@40 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __fastcall SdbpCheckMatchingRegistryValue(int,wchar_t *,void *,int,int,int,int,void *,size_t,int)
_SdbpCheckMatchingRegistryValue@40 proc	near
					; CODE XREF: SdbpCheckMatchingRegistryEntry(x,x,x,x,x,x,x,x,x,x)+17Dp
					; SdbpCheckMatchingWildcardRegistryEntry(x,x,x,x,x,x,x,x,x,x)+4Bp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		xor	esi, esi
		mov	[ebp+var_C], ecx
		mov	eax, edx
		mov	[ebp+var_8], esi
		mov	[ebp+var_10], eax
		mov	ebx, esi
		mov	[ebp+var_18], esi
		mov	[ebp+var_14], esi
		mov	[ebp+var_4], esi
		push	edi
		mov	edi, esi
		test	eax, eax
		jz	loc_A1F514
		cmp	[eax], si
		jz	loc_A1F514
		push	(offset	loc_8C2A4C+2) ;	wchar_t	*
		push	eax		; wchar_t *
		call	__wcsicmp
		pop	ecx
		pop	ecx
		test	eax, eax
		jnz	short loc_A1F375
		push	esi
		jmp	short loc_A1F38B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F375:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+45j
		mov	edx, [ebp+var_10]
		lea	ecx, [ebp+var_8]
		call	AslStringDuplicate
		test	eax, eax
		js	loc_A1F53A
		push	[ebp+var_8]

loc_A1F38B:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+48j
		lea	eax, [ebp+var_18]
		push	eax
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		push	esi
		push	1
		lea	eax, [ebp+var_18]
		push	eax
		push	[ebp+var_C]
		call	_ZwQueryValueKey@24 ; ZwQueryValueKey(x,x,x,x,x,x)
		test	eax, eax
		jns	short loc_A1F3C2
		cmp	eax, 80000005h
		jz	short loc_A1F3C2
		cmp	eax, 0C0000023h
		jz	short loc_A1F3C2
		xor	esi, esi
		inc	esi
		jmp	loc_A1F53A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F3C2:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+7Fj
					; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+86j ...
		mov	edx, [ebp+var_4]
		push	ecx
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A1F3EF
		push	offset ??_C@_0BK@JNHKJALB@Failed?5to?5allocate?5memory@NNGAKEGL@ ; "Failed to allocate memory"
		push	475h
		push	offset ??_C@_0BP@IOIMNEOA@SdbpCheckMatchingRegistryValue@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A1F53A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F3EF:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+A4j
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+var_4]
		lea	eax, [ebp+var_18]
		push	edi
		push	1
		push	eax
		push	[ebp+var_C]
		call	_ZwQueryValueKey@24 ; ZwQueryValueKey(x,x,x,x,x,x)
		test	eax, eax
		jns	short loc_A1F427
		push	offset ??_C@_0BF@JLNLEIIN@Failed?5to?5read?5value@NNGAKEGL@ ; "Failed to read value"
		push	480h

loc_A1F413:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+184j
					; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+263j ...
		push	offset ??_C@_0BP@IOIMNEOA@SdbpCheckMatchingRegistryValue@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A1F51C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F427:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+DCj
		mov	eax, [edi+4]
		cmp	[ebp+arg_0], ebx
		jnz	short loc_A1F43E
		mov	eax, [ebp+arg_1C]
		xor	ecx, ecx
		inc	ecx
		mov	esi, ecx
		mov	[eax], ecx
		jmp	loc_A1F51C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F43E:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+102j
		cmp	eax, [ebp+arg_0]
		jz	short loc_A1F44B

loc_A1F443:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+15Ej
					; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x):loc_A1F50Ej ...
		xor	esi, esi
		inc	esi
		jmp	loc_A1F51C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F44B:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+116j
		mov	ecx, [edi+8]
		add	ecx, edi
		mov	[ebp+arg_0], ecx
		test	eax, eax
		jz	loc_A1F5C4
		cmp	eax, 2
		jbe	loc_A1F572
		cmp	eax, 3
		jz	loc_A1F555
		cmp	eax, 4
		jz	loc_A1F509
		cmp	eax, 7
		jz	short loc_A1F493
		cmp	eax, 0Bh
		jnz	loc_A1F5C4
		mov	eax, [ebp+arg_C]
		cmp	eax, [ecx]
		jnz	short loc_A1F443
		mov	eax, [ebp+arg_10]
		cmp	eax, [ecx+4]
		jmp	short loc_A1F50E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F493:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+14Ej
		mov	edx, [edi+0Ch]
		push	ecx
		add	edx, 2
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_A1F4B4
		push	offset ??_C@_0BK@JNHKJALB@Failed?5to?5allocate?5memory@NNGAKEGL@ ; "Failed to allocate memory"
		push	4BCh
		jmp	loc_A1F413
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F4B4:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+178j
		push	dword ptr [edi+0Ch] ; size_t
		push	[ebp+arg_0]	; void *
		push	ebx		; void *
		call	_memmove
		mov	eax, [edi+0Ch]
		xor	ecx, ecx
		shr	eax, 1
		add	esp, 0Ch
		mov	[ebx+eax*2], cx
		mov	ecx, ebx
		mov	eax, [edi+0Ch]
		and	eax, 0FFFFFFFEh
		add	eax, ebx
		cmp	ebx, eax
		jnb	loc_A1F5AD

loc_A1F4E0:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+1D7j
		cmp	[ecx], si
		jnz	short loc_A1F4F5
		cmp	[ecx+2], si
		jz	loc_A1F5AD
		push	3Bh
		pop	eax
		mov	[ecx], ax

loc_A1F4F5:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+1B8j
		mov	eax, [edi+0Ch]
		add	ecx, 2
		and	eax, 0FFFFFFFEh
		add	eax, ebx
		cmp	ecx, eax
		jb	short loc_A1F4E0
		jmp	loc_A1F5AD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F509:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+145j
		mov	eax, [ebp+arg_8]
		cmp	eax, [ecx]

loc_A1F50E:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+166j
					; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+245j
		jnz	loc_A1F443

loc_A1F514:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+27j
					; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+30j ...
		mov	eax, [ebp+arg_1C]
		xor	esi, esi
		inc	esi
		mov	[eax], esi

loc_A1F51C:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+F7j
					; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+10Ej ...
		test	edi, edi
		jz	short loc_A1F52B
		push	74705041h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1F52B:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+1F3j
		test	ebx, ebx
		jz	short loc_A1F53A
		push	74705041h
		push	ebx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1F53A:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+57j
					; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+92j ...
		mov	eax, [ebp+var_8]
		test	eax, eax
		jz	short loc_A1F54C
		push	74705041h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1F54C:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+214j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	20h
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F555:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+13Cj
		mov	eax, [ebp+arg_18]
		cmp	eax, [edi+0Ch]
		jnz	loc_A1F443
		push	eax		; size_t
		push	ecx		; void *
		push	[ebp+arg_14]	; void *
		call	_memcmp
		add	esp, 0Ch
		test	eax, eax
		jmp	short loc_A1F50E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F572:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+133j
		mov	edx, [edi+0Ch]
		push	ecx
		add	edx, 2
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_A1F593
		push	offset ??_C@_0BK@JNHKJALB@Failed?5to?5allocate?5memory@NNGAKEGL@ ; "Failed to allocate memory"
		push	4A5h
		jmp	loc_A1F413
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F593:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+257j
		push	dword ptr [edi+0Ch] ; size_t
		push	[ebp+arg_0]	; void *
		push	ebx		; void *
		call	_memmove
		mov	eax, [edi+0Ch]
		add	esp, 0Ch
		shr	eax, 1
		xor	ecx, ecx
		mov	[ebx+eax*2], cx

loc_A1F5AD:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+1AFj
					; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+1BEj ...
		mov	ecx, [ebp+arg_4]
		mov	edx, ebx
		call	AslStringPatternMatchW
		test	eax, eax
		jnz	loc_A1F514
		jmp	loc_A1F443
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F5C4:				; CODE XREF: SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+12Aj
					; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)+153j
		push	offset ??_C@_0CB@NOENIKHC@Unknown?5registry?5value?5data?5typ@NNGAKEGL@
		push	507h
		jmp	loc_A1F413
_SdbpCheckMatchingRegistryValue@40 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckMatchingText(x, x,	x, x, x, x, x)
_SdbpCheckMatchingText@28 proc near	; DATA XREF: .text:00404604o

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	eax, [ebp+arg_0]
		mov	edx, [ebp+arg_10]
		mov	ecx, [ebp+arg_8]
		push	esi
		xor	esi, esi
		mov	[ebp+var_8], 2000h
		mov	[eax], esi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C]
		mov	[ebp+var_1C], esi
		push	eax
		lea	eax, [ebp+var_10]
		mov	[ebp+var_18], esi
		push	eax
		lea	eax, [ebp+var_4]
		mov	[ebp+var_14], esi
		push	eax
		lea	eax, [ebp+var_14]
		mov	[ebp+var_4], esi
		push	eax
		mov	[ebp+var_10], esi
		mov	[ebp+var_C], esi
		call	_SdbpGetMatchingTextAttributes@28 ; SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)
		test	eax, eax
		jnz	short loc_A1F63A
		push	(offset	loc_8C2E8B+3)
		push	846h
		push	offset ??_C@_0BG@PMEDILFH@SdbpCheckMatchingText@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A1F690
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F63A:				; CODE XREF: SdbpCheckMatchingText(x,x,x,x,x,x,x)+4Aj
		mov	ecx, [ebp+arg_4]
		lea	eax, [ebp+var_18]
		push	ebx
		mov	ebx, [ebp+arg_14]
		mov	edx, ebx
		push	eax		; int
		lea	eax, [ebp+var_1C]
		push	eax		; int
		push	[ebp+var_8]	; int
		push	[ebp+var_C]	; int
		push	[ebp+var_10]	; int
		push	[ebp+var_4]	; int
		push	[ebp+var_14]	; void *
		call	_SdbpCheckMatchingTextEntry@36 ; SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)
		test	eax, eax
		jnz	short loc_A1F67E
		push	(offset	loc_8C3000+6)
		push	857h
		push	offset ??_C@_0BG@PMEDILFH@SdbpCheckMatchingText@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A1F68F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F67E:				; CODE XREF: SdbpCheckMatchingText(x,x,x,x,x,x,x)+8Ej
		mov	ecx, [ebp+arg_0]
		xor	esi, esi
		mov	eax, [ebp+var_18]
		inc	esi
		or	[ebx+28h], eax
		mov	eax, [ebp+var_1C]
		mov	[ecx], eax

loc_A1F68F:				; CODE XREF: SdbpCheckMatchingText(x,x,x,x,x,x,x)+A9j
		pop	ebx

loc_A1F690:				; CODE XREF: SdbpCheckMatchingText(x,x,x,x,x,x,x)+65j
		cmp	[ebp+var_4], 0
		jz	short loc_A1F6A3
		push	74705041h
		push	[ebp+var_4]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1F6A3:				; CODE XREF: SdbpCheckMatchingText(x,x,x,x,x,x,x)+C1j
		mov	eax, esi
		pop	esi
		leave
		retn	1Ch
_SdbpCheckMatchingText@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	SdbpCheckMatchingTextEntry(void	*,int,int,int,int,int,int)
_SdbpCheckMatchingTextEntry@36 proc near
					; CODE XREF: SdbpCheckMatchingText(x,x,x,x,x,x,x)+87p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 2Ch
		mov	eax, [ebp+arg_14]
		push	ebx
		push	esi
		xor	esi, esi
		mov	[esp+34h+var_14], edx
		test	byte ptr [edx],	1
		mov	ebx, esi
		mov	[eax], esi
		mov	eax, [ebp+arg_18]
		push	edi
		mov	[esp+38h+var_8], ecx
		mov	[esp+38h+var_18], esi
		mov	[esp+38h+var_1C], ebx
		mov	[esp+38h+var_10], esi
		mov	[esp+38h+var_28], esi
		mov	[eax], esi
		jnz	short loc_A1F712
		mov	ecx, edx
		call	SdbpInitializeSearchDBContext
		test	eax, eax
		jnz	short loc_A1F70E
		push	offset ??_C@_0CF@DDPIMIDA@Failed?5to?5initialize?5SEARCHDBCO@NNGAKEGL@
		xor	edi, edi
		push	741h
		inc	edi

loc_A1F6FB:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+301j
					; SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+310j ...
		push	offset ??_C@_0BL@EOPMKEHA@SdbpCheckMatchingTextEntry@NNGAKEGL@
		push	edi
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A1F7E2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F70E:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+42j
		mov	edx, [esp+38h+var_14]

loc_A1F712:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+37j
		mov	ecx, [edx+24h]
		xor	edi, edi
		inc	edi
		mov	[esp+38h+var_4], ecx
		mov	[esp+38h+var_24], esi
		cmp	[ecx], esi
		jle	loc_A1F7DB
		lea	ebx, [ecx+4]
		mov	[esp+38h+var_20], ebx
		jmp	short loc_A1F735
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F731:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+12Bj
		mov	ebx, [esp+38h+var_20]

loc_A1F735:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+85j
		mov	ecx, [ebp+arg_0]
		lea	eax, [ecx+2]
		mov	[esp+38h+var_C], eax

loc_A1F73F:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+9Ej
		mov	ax, [ecx]
		add	ecx, 2
		cmp	ax, si
		jnz	short loc_A1F73F
		sub	ecx, [esp+38h+var_C]
		lea	eax, [esp+38h+var_1C]
		push	eax		; int
		sar	ecx, 1
		push	ebx		; int
		push	ecx		; int
		push	[ebp+arg_0]	; void *
		mov	ecx, [esp+48h+var_8]
		call	SdbpResolveMatchingFile
		test	eax, eax
		jz	loc_A1F9CE
		mov	ebx, [esp+38h+var_1C]
		lea	ecx, [esp+38h+var_28]
		push	esi
		push	esi
		push	esi
		mov	edx, ebx
		call	AslFileMappingCreate
		mov	ecx, eax
		test	ecx, ecx
		js	short loc_A1F78E
		mov	ecx, [esp+38h+var_28]
		call	_AslFileMappingEnsureMappedAs@8	; AslFileMappingEnsureMappedAs(x,x)
		mov	ecx, eax

loc_A1F78E:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+D7j
		call	AslFileNotFound
		test	eax, eax
		jz	loc_A1F825
		mov	ecx, [esp+38h+var_28]
		call	AslFileMappingDelete
		mov	[esp+38h+var_28], esi
		test	ebx, ebx
		jz	short loc_A1F7B7
		push	74705041h
		push	ebx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1F7B7:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+100j
		mov	eax, [esp+38h+var_24]
		mov	ebx, esi
		mov	ecx, [esp+38h+var_4]
		inc	eax
		add	[esp+38h+var_20], 18h
		mov	edx, [esp+38h+var_14]
		mov	[esp+38h+var_1C], ebx
		mov	[esp+38h+var_24], eax
		cmp	eax, [ecx]
		jl	loc_A1F731

loc_A1F7DB:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+78j
					; SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+1B0j ...
		mov	eax, [ebp+arg_14]
		mov	[eax], esi

loc_A1F7E0:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+2F2j
		mov	esi, edi

loc_A1F7E2:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+5Fj
					; SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+19Bj ...
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax]
		cmp	eax, 25h
		jz	short loc_A1F7F7
		cmp	eax, 5Ch
		jz	short loc_A1F7F7
		cmp	eax, 2Eh
		jnz	short loc_A1F7FC

loc_A1F7F7:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+141j
					; SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+146j
		mov	eax, [ebp+arg_18]
		mov	[eax], edi

loc_A1F7FC:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+14Bj
		test	ebx, ebx
		jz	short loc_A1F80B
		push	74705041h
		push	ebx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1F80B:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+154j
		mov	eax, [esp+38h+var_28]
		test	eax, eax
		jz	short loc_A1F81A
		mov	ecx, eax
		call	AslFileMappingDelete

loc_A1F81A:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+167j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	1Ch
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F825:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+EBj
		test	ecx, ecx
		jns	short loc_A1F847
		push	ecx
		push	(offset	loc_8C2EFA+4)
		push	779h
		xor	edi, edi
		push	offset ??_C@_0BL@EOPMKEHA@SdbpCheckMatchingTextEntry@NNGAKEGL@
		inc	edi
		push	edi
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A1F7E2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F847:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+17Dj
		mov	eax, [esp+38h+var_24]
		test	eax, eax
		jle	short loc_A1F854
		mov	eax, [ebp+arg_18]
		mov	[eax], edi

loc_A1F854:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+1A3j
		mov	ecx, [esp+38h+var_28]
		test	ecx, ecx
		jz	loc_A1F7DB
		mov	eax, [ecx+10h]
		mov	edx, esi
		mov	[esp+38h+var_14], eax
		mov	eax, [ecx+14h]
		mov	ecx, [ecx+18h]
		mov	[esp+38h+var_8], ecx
		mov	[esp+38h+var_20], edx
		cmp	esi, eax
		jb	short loc_A1F88F
		mov	eax, [esp+38h+var_14]
		ja	short loc_A1F888
		mov	ecx, [ebp+arg_10]
		cmp	ecx, eax
		jb	short loc_A1F892

loc_A1F888:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+1D5j
		mov	ecx, eax
		mov	[ebp+arg_10], ecx
		jmp	short loc_A1F892
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F88F:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+1CFj
		mov	ecx, [ebp+arg_10]

loc_A1F892:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+1DCj
					; SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+1E3j
		cmp	[ebp+arg_8], ecx
		ja	loc_A1F7DB
		xor	eax, eax
		cmp	[ebp+arg_C], 3
		setz	al
		inc	eax
		mov	[esp+38h+var_C], eax
		test	ecx, ecx
		jz	loc_A1F993
		mov	[esp+38h+var_4], 1000h

loc_A1F8B9:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+2E3j
		cmp	edx, [ebp+arg_8]
		jbe	short loc_A1F8C7
		sub	eax, [ebp+arg_8]
		add	edx, eax
		mov	[esp+38h+var_20], edx

loc_A1F8C7:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+212j
		mov	eax, ecx
		mov	ecx, [esp+38h+var_4]
		sub	eax, edx
		mov	[esp+38h+var_24], eax
		cmp	eax, ecx
		jbe	short loc_A1F8DD
		mov	eax, ecx
		mov	[esp+38h+var_24], ecx

loc_A1F8DD:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+22Bj
		push	ecx
		lea	edx, [eax+2]
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	[esp+38h+var_1C], eax
		test	eax, eax
		jz	loc_A1F9BF
		mov	edx, [esp+38h+var_20]
		lea	eax, [esp+38h+var_10]
		mov	ecx, [esp+38h+var_8]
		push	eax
		call	_RtlULongPtrAdd@12 ; RtlULongPtrAdd(x,x,x)
		test	eax, eax
		js	loc_A1F9B0
		push	[esp+38h+var_24] ; size_t
		push	[esp+3Ch+var_10] ; void	*
		push	[esp+40h+var_1C] ; void	*
		call	_memcpy
		mov	eax, [ebp+arg_C]
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A1F9A1
		cmp	eax, 2
		jbe	short loc_A1F94B
		cmp	eax, 3
		jnz	short loc_A1F9A1
		mov	eax, [ebp+arg_8]
		mov	edx, [esp+38h+var_24]
		mov	ecx, [esp+38h+var_1C]
		shr	eax, 1
		push	eax
		push	[ebp+arg_4]
		shr	edx, 1
		call	_AslStringSearchW@16 ; AslStringSearchW(x,x,x,x)
		jmp	short loc_A1F95E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F94B:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+280j
		push	[ebp+arg_8]
		mov	ecx, [esp+3Ch+var_1C]
		push	[ebp+arg_4]
		mov	edx, [esp+40h+var_24]
		call	_AslStringSearchA@16 ; AslStringSearchA(x,x,x,x)

loc_A1F95E:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+29Fj
		test	eax, eax
		jz	short loc_A1F966
		mov	[esp+38h+var_18], edi

loc_A1F966:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+2B6j
		mov	eax, [esp+38h+var_20]
		add	eax, [esp+38h+var_24]
		push	74705041h
		push	[esp+3Ch+var_1C]
		mov	[esp+40h+var_20], eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	ecx, [ebp+arg_10]
		mov	edx, [esp+38h+var_20]
		mov	eax, [esp+38h+var_C]
		cmp	edx, ecx
		jb	loc_A1F8B9

loc_A1F993:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+201j
		mov	eax, [ebp+arg_14]
		mov	ecx, [esp+38h+var_18]
		mov	[eax], ecx
		jmp	loc_A1F7E0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F9A1:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+27Bj
					; SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+285j
		push	(offset	loc_8C2EE0+8)
		push	7E9h
		jmp	loc_A1F6FB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F9B0:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+25Cj
		push	(offset	loc_8C2EC7+1)
		push	7C7h
		jmp	loc_A1F6FB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F9BF:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+242j
		push	offset ??_C@_0BP@JNLJBLGM@Failed?5to?5allocate?5temp?5buffer@NNGAKEGL@
		push	7C0h
		jmp	loc_A1F6FB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1F9CE:				; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+BBj
		push	offset ??_C@_0CF@OMCJMENO@Failed?5to?5resolve?5matching?5text@NNGAKEGL@
		push	759h
		xor	edi, edi
		push	offset ??_C@_0BL@EOPMKEHA@SdbpCheckMatchingTextEntry@NNGAKEGL@
		inc	edi
		push	edi
		call	AslLogCallPrintf
		mov	ebx, [esp+48h+var_1C]
		add	esp, 10h
		jmp	loc_A1F7E2
_SdbpCheckMatchingTextEntry@36 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckMatchingWildcardFiles(x, x, x, x, x, x, x)
_SdbpCheckMatchingWildcardFiles@28 proc	near ; DATA XREF: .text:00404684o

var_240		= dword	ptr -240h
var_23C		= dword	ptr -23Ch
var_238		= dword	ptr -238h
var_234		= dword	ptr -234h
var_230		= dword	ptr -230h
var_22C		= dword	ptr -22Ch
var_228		= dword	ptr -228h
var_224		= dword	ptr -224h
var_220		= dword	ptr -220h
var_21C		= dword	ptr -21Ch
var_218		= dword	ptr -218h
var_214		= dword	ptr -214h
var_210		= dword	ptr -210h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 244h
		mov	eax, ___security_cookie
		xor	eax, esp
		mov	[esp+244h+var_4], eax
		mov	eax, [ebp+arg_0]
		push	ebx
		mov	ebx, [ebp+arg_14]
		push	esi
		xor	esi, esi
		mov	[esp+24Ch+var_214], eax
		mov	eax, [ebp+arg_4]
		push	edi
		mov	[esp+250h+var_228], eax
		mov	edi, esi
		mov	eax, [ebp+arg_8]
		mov	[esp+250h+var_22C], eax
		mov	[esp+250h+var_240], ebx
		mov	[esp+250h+var_230], esi
		mov	[esp+250h+var_238], edi
		mov	[esp+250h+var_23C], esi
		mov	[esp+250h+var_234], esi
		call	_Feature_CompatBuildInVb__private_IsEnabledDeviceUsage@0 ; Feature_CompatBuildInVb__private_IsEnabledDeviceUsage()
		test	eax, eax
		jnz	short loc_A1FA59
		cmp	[ebx+2Ch], esi
		jz	short loc_A1FA59
		inc	esi
		mov	[esp+250h+var_230], esi
		jmp	loc_A1FBFC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FA59:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+56j
					; SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+5Bj
		mov	ebx, [esp+250h+var_22C]
		mov	ecx, ebx
		mov	edx, [ebp+arg_10]
		push	6001h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jz	loc_A1FBFC
		mov	edx, eax
		mov	ecx, ebx
		call	SdbGetStringTagPtr
		mov	[esp+250h+var_21C], eax
		test	eax, eax
		jnz	short loc_A1FAA3
		push	offset ??_C@_0CL@CODINPLA@Failed?5to?5get?5the?5string?5from?5t@NNGAKEGL@
		push	0C5Dh

loc_A1FA8F:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+E3j
		push	(offset	loc_8C314D+5)
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A1FBFC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FAA3:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+91j
		mov	ebx, eax
		lea	ecx, [ebx+2]

loc_A1FAA8:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+BFj
		mov	ax, [ebx]
		add	ebx, 2
		cmp	ax, si
		jnz	short loc_A1FAA8
		mov	eax, [esp+250h+var_240]
		sub	ebx, ecx
		sar	ebx, 1
		test	byte ptr [eax],	1
		jnz	short loc_A1FADB
		mov	ecx, eax
		call	SdbpInitializeSearchDBContext
		test	eax, eax
		jnz	short loc_A1FAD7
		push	offset ??_C@_0CF@DDPIMIDA@Failed?5to?5initialize?5SEARCHDBCO@NNGAKEGL@
		push	0C6Bh
		jmp	short loc_A1FA8F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FAD7:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+D7j
		mov	eax, [esp+250h+var_240]

loc_A1FADB:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+CCj
		mov	ecx, [eax+24h]
		mov	[esp+250h+var_218], ecx
		mov	[esp+250h+var_224], esi
		cmp	[ecx], esi
		jle	loc_A1FBF6
		lea	edx, [ecx+4]
		mov	[esp+250h+var_220], edx

loc_A1FAF5:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+1FEj
		lea	ecx, [esp+250h+var_238]
		push	ecx		; int
		mov	ecx, [esp+254h+var_228]
		push	edx		; int
		push	ebx		; int
		push	[esp+25Ch+var_21C] ; void *
		mov	edx, eax
		call	SdbpResolveMatchingFile
		test	eax, eax
		jz	loc_A1FC46
		lea	ecx, [esp+250h+var_234]
		call	_AslPathWildcardFindClose@4 ; AslPathWildcardFindClose(x)
		push	208h		; size_t
		lea	eax, [esp+254h+var_210]
		push	esi		; int
		push	eax		; void *
		call	_memset
		mov	edi, [esp+25Ch+var_238]
		lea	eax, [esp+25Ch+var_234]
		add	esp, 0Ch
		lea	ecx, [esp+250h+var_210]
		push	eax		; int
		push	edi		; void *
		call	_AslPathWildcardFindFirst@16 ; AslPathWildcardFindFirst(x,x,x,x)
		jmp	short loc_A1FB98
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FB44:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+1A8j
		mov	eax, [esp+250h+var_23C]
		test	eax, eax
		jz	short loc_A1FB57
		mov	ecx, eax
		call	AslFileMappingDelete
		mov	[esp+250h+var_23C], esi

loc_A1FB57:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+158j
		push	esi
		push	esi
		push	esi
		lea	edx, [esp+25Ch+var_210]
		lea	ecx, [esp+25Ch+var_23C]
		call	AslFileMappingCreate
		test	eax, eax
		js	short loc_A1FB9C
		push	[esp+250h+var_23C]
		mov	edx, [esp+254h+var_228]
		lea	ecx, [esp+254h+var_230]
		push	[ebp+arg_10]
		push	[esp+258h+var_22C]
		call	_SdbpCheckAllAttributes@20 ; SdbpCheckAllAttributes(x,x,x,x,x)
		test	eax, eax
		jns	loc_A1FC40
		push	[esp+250h+var_234]
		lea	ecx, [esp+254h+var_210]
		call	_AslPathWildcardFindNext@12 ; AslPathWildcardFindNext(x,x,x)

loc_A1FB98:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+150j
		test	eax, eax
		jns	short loc_A1FB44

loc_A1FB9C:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+177j
		cmp	eax, 80000006h
		jz	short loc_A1FBBD
		push	eax
		push	offset ??_C@_0DJ@BEFCHLOA@AslPathWildcardFindFirst?1Next?5f@NNGAKEGL@
		push	0CB9h
		push	(offset	loc_8C314D+5)
		push	3
		call	AslLogCallPrintf
		add	esp, 14h

loc_A1FBBD:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+1AFj
		test	edi, edi
		jz	short loc_A1FBD2
		push	74705041h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	edi, esi
		mov	[esp+250h+var_238], edi

loc_A1FBD2:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+1CDj
		mov	eax, [esp+250h+var_218]
		mov	ecx, [esp+250h+var_224]
		mov	edx, [esp+250h+var_220]
		inc	ecx
		add	edx, 18h
		mov	[esp+250h+var_224], ecx
		cmp	ecx, [eax]
		mov	eax, [esp+250h+var_240]
		mov	[esp+250h+var_220], edx
		jl	loc_A1FAF5

loc_A1FBF6:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+F6j
					; SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+252j
		xor	esi, esi
		inc	esi
		mov	[eax+28h], esi

loc_A1FBFC:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+62j
					; SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+7Cj ...
		lea	ecx, [esp+250h+var_234]
		call	_AslPathWildcardFindClose@4 ; AslPathWildcardFindClose(x)
		mov	ecx, [esp+250h+var_23C]
		call	AslFileMappingDelete
		test	edi, edi
		jz	short loc_A1FC1D
		push	74705041h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A1FC1D:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+21Ej
		mov	eax, [esp+250h+var_214]
		mov	ecx, [esp+250h+var_230]
		pop	edi
		mov	[eax], ecx
		mov	eax, esi
		mov	ecx, [esp+24Ch+var_4]
		pop	esi
		pop	ebx
		xor	ecx, esp
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		mov	esp, ebp
		pop	ebp
		retn	1Ch
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FC40:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+193j
		mov	eax, [esp+250h+var_240]
		jmp	short loc_A1FBF6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FC46:				; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+11Bj
		push	offset ??_C@_0CA@GEALLKGN@Failed?5to?5resolve?5matching?5file@NNGAKEGL@
		push	0C83h
		push	(offset	loc_8C314D+5)
		push	1
		call	AslLogCallPrintf
		mov	edi, [esp+260h+var_238]
		add	esp, 10h
		jmp	short loc_A1FBFC
_SdbpCheckMatchingWildcardFiles@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckMatchingWildcardRegistry(x, x, x, x, x, x,	x)
_SdbpCheckMatchingWildcardRegistry@28 proc near	; DATA XREF: .text:00404694o

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	eax
		mov	edx, [ebp+arg_10]
		lea	eax, [ebp+var_8]
		mov	ecx, [ebp+arg_8]
		xor	esi, esi
		push	eax
		lea	eax, [ebp+var_28]
		mov	[ebp+var_20], esi
		push	eax
		lea	eax, [ebp+var_C]
		mov	[ebp+var_1C], esi
		push	eax
		lea	eax, [ebp+var_10]
		mov	[ebp+var_18], esi
		push	eax
		lea	eax, [ebp+var_14]
		mov	[ebp+var_14], esi
		push	eax
		lea	eax, [ebp+var_18]
		mov	[ebp+var_10], esi
		push	eax
		lea	eax, [ebp+var_1C]
		mov	[ebp+var_C], esi
		push	eax
		mov	[ebp+var_28], esi
		mov	[ebp+var_24], esi
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], esi
		mov	[edi], esi
		call	_SdbpGetRegistryMatchingAttributes@40 ;	SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)
		test	eax, eax
		jnz	short loc_A1FCDE
		push	offset ??_C@_0DA@IPBPJHH@Failed?5to?5read?5MATCHING_WILDCAR@NNGAKEGL@
		push	621h

loc_A1FCCD:				; CODE XREF: SdbpCheckMatchingWildcardRegistry(x,x,x,x,x,x,x)+ABj
		push	offset ??_C@_0CC@GNBGCCDF@SdbpCheckMatchingWildcardRegist@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A1FD20
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FCDE:				; CODE XREF: SdbpCheckMatchingWildcardRegistry(x,x,x,x,x,x,x)+5Cj
		mov	edx, [ebp+var_18]
		lea	eax, [ebp+var_20]
		mov	ecx, [ebp+var_1C]
		push	eax		; int
		push	[ebp+var_4]	; size_t
		push	[ebp+var_8]	; void *
		push	[ebp+var_24]	; int
		push	[ebp+var_28]	; int
		push	[ebp+var_C]	; int
		push	[ebp+var_10]	; int
		push	[ebp+var_14]	; void *
		call	_SdbpCheckMatchingWildcardRegistryEntry@40 ; SdbpCheckMatchingWildcardRegistryEntry(x,x,x,x,x,x,x,x,x,x)
		test	eax, eax
		jnz	short loc_A1FD12
		push	offset ??_C@_0DB@EIHOIBJC@Failed?5to?5check?5MATCHING_WILDCA@NNGAKEGL@
		push	632h
		jmp	short loc_A1FCCD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FD12:				; CODE XREF: SdbpCheckMatchingWildcardRegistry(x,x,x,x,x,x,x)+9Fj
		mov	ecx, [ebp+arg_14]
		xor	esi, esi
		inc	esi
		mov	[ecx+28h], esi
		mov	ecx, [ebp+var_20]
		mov	[edi], ecx

loc_A1FD20:				; CODE XREF: SdbpCheckMatchingWildcardRegistry(x,x,x,x,x,x,x)+77j
		pop	edi
		mov	eax, esi
		pop	esi
		leave
		retn	1Ch
_SdbpCheckMatchingWildcardRegistry@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	SdbpCheckMatchingWildcardRegistryEntry(void *,int,int,int,int,void *,size_t,int)
_SdbpCheckMatchingWildcardRegistryEntry@40 proc	near
					; CODE XREF: SdbpCheckMatchingWildcardRegistry(x,x,x,x,x,x,x)+98p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 0Ch
		push	ebx
		push	esi
		mov	esi, [ebp+arg_1C]
		xor	ebx, ebx
		push	edi
		mov	edi, edx
		mov	[esp+18h+var_4], ebx
		push	ecx
		lea	edx, [esp+1Ch+var_4]
		mov	[esp+1Ch+var_8], ebx
		lea	ecx, [esp+1Ch+var_8]
		mov	[esi], ebx
		call	_AslRegWildcardFindFirst@12 ; AslRegWildcardFindFirst(x,x,x)
		jmp	short loc_A1FD8D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FD57:				; CODE XREF: SdbpCheckMatchingWildcardRegistryEntry(x,x,x,x,x,x,x,x,x,x)+67j
		mov	ecx, [esp+18h+var_8] ; int
		mov	edx, edi	; wchar_t *
		push	esi		; int
		push	[ebp+arg_18]	; size_t
		push	[ebp+arg_14]	; void *
		push	[ebp+arg_10]	; int
		push	[ebp+arg_C]	; int
		push	[ebp+arg_8]	; int
		push	[ebp+arg_4]	; int
		push	[ebp+arg_0]	; void *
		call	_SdbpCheckMatchingRegistryValue@40 ; SdbpCheckMatchingRegistryValue(x,x,x,x,x,x,x,x,x,x)
		test	eax, eax
		jz	short loc_A1FD80
		cmp	[esi], ebx
		jnz	short loc_A1FD91

loc_A1FD80:				; CODE XREF: SdbpCheckMatchingWildcardRegistryEntry(x,x,x,x,x,x,x,x,x,x)+52j
		mov	edx, [esp+18h+var_4]
		lea	ecx, [esp+18h+var_8]
		call	_AslRegWildcardFindNext@8 ; AslRegWildcardFindNext(x,x)

loc_A1FD8D:				; CODE XREF: SdbpCheckMatchingWildcardRegistryEntry(x,x,x,x,x,x,x,x,x,x)+2Dj
		test	eax, eax
		jns	short loc_A1FD57

loc_A1FD91:				; CODE XREF: SdbpCheckMatchingWildcardRegistryEntry(x,x,x,x,x,x,x,x,x,x)+56j
		mov	ecx, [esp+18h+var_4]
		call	_AslRegWildcardFindClose@4 ; AslRegWildcardFindClose(x)
		pop	edi
		xor	eax, eax
		pop	esi
		inc	eax
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	20h
_SdbpCheckMatchingWildcardRegistryEntry@40 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckOSKind(x, x, x, x,	x, x, x)
_SdbpCheckOSKind@28 proc near		; DATA XREF: .text:00404644o

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_10]
		mov	ecx, [ebp+arg_8]
		push	0
		call	SdbReadDWORDTag
		mov	ecx, [ebp+arg_4]
		mov	ecx, [ecx+1A0h]
		and	ecx, eax
		mov	eax, [ebp+arg_0]
		neg	ecx
		sbb	ecx, ecx
		neg	ecx
		mov	[eax], ecx
		xor	eax, eax
		inc	eax
		pop	ebp
		retn	1Ch
_SdbpCheckOSKind@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckPackageAttributes(x, x, x,	x, x, x, x)
_SdbpCheckPackageAttributes@28 proc near ; DATA	XREF: .text:00404654o
					; .text:00404664o ...

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	eax, [ebp+arg_14]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		xor	ebx, ebx
		mov	eax, [eax+2Ch]
		inc	ebx
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_0]
		push	edi
		xor	edi, edi
		mov	[ebp+var_10], ebx
		mov	[eax], edi
		mov	eax, edi
		mov	[ebp+var_4], eax

loc_A1FDFE:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+1F8j
		movzx	eax, word_6B68F4[eax]
		mov	edx, [ebp+arg_10]
		mov	ecx, [esi+4]
		push	eax
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	[ebp+arg_14], eax
		test	eax, eax
		jz	loc_A1FFC1
		mov	edx, [ebp+var_8]
		mov	ebx, edi
		mov	eax, [edx+8]
		mov	[ebp+var_18], eax
		test	eax, eax
		jz	loc_A1FFE4
		mov	ecx, [ebp+var_4]
		movzx	esi, word_6B68F6[ecx]
		mov	[ebp+var_C], esi
		mov	ecx, esi

loc_A1FE3E:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+A6j
		mov	esi, edi
		cmp	ebx, eax
		jnb	short loc_A1FE71
		mov	eax, [edx+4]
		lea	ecx, [ebp+var_14]
		mul	ebx
		mov	[ebp+var_14], edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		mov	edx, [ebp+var_8]
		test	eax, eax
		js	short loc_A1FE69
		mov	ecx, [edx+14h]
		mov	esi, [ebp+var_14]
		add	esi, ecx
		cmp	esi, ecx
		jnb	short loc_A1FE6B

loc_A1FE69:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+86j
		mov	esi, edi

loc_A1FE6B:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+92j
		mov	ecx, [ebp+var_C]
		mov	eax, [ebp+var_18]

loc_A1FE71:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+6Dj
		cmp	[esi], cx
		jz	short loc_A1FE7D
		inc	ebx
		mov	esi, edi
		cmp	ebx, eax
		jb	short loc_A1FE3E

loc_A1FE7D:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+9Fj
		test	esi, esi
		jz	loc_A1FFE4
		mov	eax, [ebp+var_4]
		mov	ecx, 5017h
		movzx	eax, word_6B68F4[eax]
		cmp	eax, ecx
		ja	loc_A1FF45
		jz	short loc_A1FF17
		sub	eax, 4045h
		jz	short loc_A1FEEF
		sub	eax, 0FCFh
		jz	short loc_A1FF17
		sub	eax, 1
		jz	loc_A1FF83
		sub	eax, 1
		jnz	loc_A1FFDB

loc_A1FEBE:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+17Cj
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_14]
		push	0FFFFFFFFh
		push	0FFFFFFFFh
		mov	ecx, [eax+4]
		call	SdbReadQWORDTag
		mov	ecx, eax
		and	eax, edx
		cmp	eax, 0FFFFFFFFh
		jz	loc_A1FFDB
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	edx
		push	ecx
		call	_SdbpCheckUptoVersion@16 ; SdbpCheckUptoVersion(x,x,x,x)
		jmp	loc_A1FFAB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FEEF:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+CEj
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_14]
		push	0FFFFFFFFh
		mov	ecx, [eax+4]
		call	SdbReadDWORDTag
		mov	ecx, eax
		cmp	ecx, 0FFFFFFFFh
		jz	loc_A1FFDB
		xor	eax, eax
		cmp	ecx, [esi+8]
		setz	al
		jmp	loc_A1FFAB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FF17:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+C7j
					; SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+D5j
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_14]
		push	0FFFFFFFFh
		push	0FFFFFFFFh
		mov	ecx, [eax+4]
		call	SdbReadQWORDTag
		mov	ecx, eax
		and	eax, edx
		cmp	eax, 0FFFFFFFFh
		jz	loc_A1FFDB
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	edx
		push	ecx
		call	_SdbpCheckVersion@16 ; SdbpCheckVersion(x,x,x,x)
		jmp	short loc_A1FFAB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FF45:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+C1j
		cmp	eax, 5018h
		jz	short loc_A1FF83
		cmp	eax, 5019h
		jz	loc_A1FEBE
		cmp	eax, 6028h
		jbe	short loc_A1FFDB
		cmp	eax, 602Bh
		ja	short loc_A1FFDB
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_14]
		mov	ecx, [eax+4]
		call	SdbGetStringTagPtr
		test	eax, eax
		jz	short loc_A1FFDB
		mov	edx, [esi+8]
		mov	ecx, eax
		call	AslStringPatternMatchW
		jmp	short loc_A1FFAB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FF83:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+DAj
					; SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+175j
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_14]
		push	0FFFFFFFFh
		push	0FFFFFFFFh
		mov	ecx, [eax+4]
		call	SdbReadQWORDTag
		mov	ecx, eax
		and	eax, edx
		cmp	eax, 0FFFFFFFFh
		jz	short loc_A1FFDB
		push	dword ptr [esi+0Ch]
		push	dword ptr [esi+8]
		push	edx
		push	ecx
		call	_SdbpCheckFromVersion@16 ; SdbpCheckFromVersion(x,x,x,x)

loc_A1FFAB:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+115j
					; SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+13Dj ...
		cmp	[ebp+var_10], edi
		jz	short loc_A1FFB9
		test	eax, eax
		jz	short loc_A1FFB9
		xor	ebx, ebx
		inc	ebx
		jmp	short loc_A1FFBB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FFB9:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+1D9j
					; SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+1DDj
		mov	ebx, edi

loc_A1FFBB:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+1E2j
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_10], ebx

loc_A1FFC1:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+41j
		mov	eax, [ebp+var_4]
		add	eax, 4
		mov	[ebp+var_4], eax
		cmp	eax, 28h
		jb	loc_A1FDFE
		mov	eax, [ebp+arg_0]
		xor	edi, edi
		inc	edi
		mov	[eax], ebx

loc_A1FFDB:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+E3j
					; SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+102j ...
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	1Ch
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A1FFE4:				; CODE XREF: SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+54j
					; SdbpCheckPackageAttributes(x,x,x,x,x,x,x)+AAj
		push	offset ??_C@_0CM@KNENAJOM@Failed?5to?5find?5Attribute?5to?5use@NNGAKEGL@
		push	13E2h
		push	offset ??_C@_0BL@IBJIFFMD@SdbpCheckPackageAttributes@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A1FFDB
_SdbpCheckPackageAttributes@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckRuntimePlatform(x,	x, x, x, x, x, x)
_SdbpCheckRuntimePlatform@28 proc near	; DATA XREF: .text:00404634o

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_10]
		push	esi
		mov	esi, [ebp+arg_8]
		mov	ecx, esi
		push	edi
		mov	edi, [eax+194h]
		push	0FFh
		call	SdbReadDWORDTag
		mov	edx, [esi+0A28h]
		mov	ecx, [ebp+arg_0]
		push	eax
		push	edi
		call	_SdbpCheckRuntimePlatformImpl@16 ; SdbpCheckRuntimePlatformImpl(x,x,x,x)
		pop	edi
		pop	esi
		pop	ebp
		retn	1Ch
_SdbpCheckRuntimePlatform@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckRuntimePlatformImpl(x, x, x, x)
_SdbpCheckRuntimePlatformImpl@16 proc near
					; CODE XREF: SdbpCheckRuntimePlatform(x,x,x,x,x,x,x)+2Dp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		test	dl, 2
		jz	short loc_A2004E
		push	[ebp+arg_4]
		mov	edx, [ebp+arg_0]
		call	_SdbpCheckRuntimePlatformV2Impl@12 ; SdbpCheckRuntimePlatformV2Impl(x,x,x)
		jmp	short loc_A2005F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2004E:				; CODE XREF: SdbpCheckRuntimePlatformImpl(x,x,x,x)+8j
		mov	eax, [ebp+arg_0]
		and	eax, [ebp+arg_4]
		neg	eax
		sbb	eax, eax
		neg	eax
		mov	[ecx], eax
		xor	eax, eax
		inc	eax

loc_A2005F:				; CODE XREF: SdbpCheckRuntimePlatformImpl(x,x,x,x)+15j
		pop	ebp
		retn	8
_SdbpCheckRuntimePlatformImpl@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckRuntimePlatformV2Impl(x, x, x)
_SdbpCheckRuntimePlatformV2Impl@12 proc	near
					; CODE XREF: SdbpCheckRuntimePlatformImpl(x,x,x,x)+10p

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		xor	eax, eax
		xor	esi, esi
		cmp	[ebp+arg_0], 0C0000000h
		mov	ebx, edx
		push	edi
		mov	edi, ecx
		jnz	short loc_A2008A
		inc	esi

loc_A2007D:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+72j
		mov	eax, esi

loc_A2007F:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+2Cj
					; SdbpCheckRuntimePlatformV2Impl(x,x,x)+78j ...
		mov	[edi], eax
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2008A:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+17j
		xor	ecx, ecx
		inc	esi

loc_A2008D:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+80j
		test	eax, eax
		jnz	short loc_A2007F
		mov	edx, [ebp+arg_0]
		shr	edx, cl
		test	dl, 40h
		jz	short loc_A200DD
		and	edx, 3Fh
		sub	edx, eax
		jz	short loc_A200D2
		sub	edx, 5
		jz	short loc_A200CB
		sub	edx, 4
		jz	short loc_A200BC
		dec	edx
		sub	edx, 1
		jz	short loc_A200C4
		sub	edx, 1
		jz	short loc_A200C4
		sub	edx, 1
		jnz	short loc_A200D7

loc_A200BC:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+47j
		mov	eax, ebx
		shr	eax, 1

loc_A200C0:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+66j
					; SdbpCheckRuntimePlatformV2Impl(x,x,x)+6Dj
		and	eax, esi
		jmp	short loc_A200D9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A200C4:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+4Dj
					; SdbpCheckRuntimePlatformV2Impl(x,x,x)+52j
		mov	eax, ebx
		shr	eax, 2
		jmp	short loc_A200C0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A200CB:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+42j
		mov	eax, ebx
		shr	eax, 3
		jmp	short loc_A200C0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A200D2:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+3Dj
		test	bl, 1
		jnz	short loc_A2007D

loc_A200D7:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+57j
		xor	eax, eax

loc_A200D9:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+5Fj
		test	eax, eax
		jnz	short loc_A2007F

loc_A200DD:				; CODE XREF: SdbpCheckRuntimePlatformV2Impl(x,x,x)+36j
		add	ecx, 8
		cmp	ecx, 18h
		jl	short loc_A2008D
		jmp	short loc_A2007F
_SdbpCheckRuntimePlatformV2Impl@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetDeviceDWORD(x, x, x)
_SdbpGetDeviceDWORD@12 proc near	; CODE XREF: SdbpMatchDeviceDWORD(x,x,x,x,x,x)+14p
					; SdbpMatchDeviceDWORD(x,x,x,x,x,x)+2Cp ...

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		push	ebx
		mov	edi, ecx
		or	esi, 0FFFFFFFFh
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	edx, eax
		test	edx, edx
		jz	short loc_A20110
		movzx	eax, bx
		mov	ecx, edi
		push	eax
		call	SdbReadDWORDTag
		mov	esi, eax

loc_A20110:				; CODE XREF: SdbpGetDeviceDWORD(x,x,x)+1Aj
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
_SdbpGetDeviceDWORD@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetMatchingTextAttributes(x, x,	x, x, x, x, x)
_SdbpGetMatchingTextAttributes@28 proc near
					; CODE XREF: SdbpCheckMatchingText(x,x,x,x,x,x,x)+43p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		mov	ebx, ecx
		mov	eax, edx
		mov	ecx, [ebp+arg_0]
		push	esi
		xor	esi, esi
		mov	[ebp+var_4], eax
		push	edi
		mov	[ecx], esi
		mov	edi, esi
		mov	ecx, [ebp+arg_4]
		push	6001h
		mov	[ecx], esi
		mov	ecx, [ebp+arg_8]
		mov	[ecx], esi
		mov	ecx, [ebp+arg_C]
		mov	[ecx], esi
		mov	ecx, [ebp+arg_10]
		mov	dword ptr [ecx], 2000h
		mov	ecx, ebx
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jnz	short loc_A2017A
		push	offset ??_C@_0CG@JELBPBFJ@Failed?5to?5get?5MATCHING_TEXT?5fil@NNGAKEGL@	; "Failed to get MATCHING_TEXT file path"
		push	6C7h

loc_A20166:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+9Ej
					; SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+BAj ...
		push	offset ??_C@_0BO@OFDLBECN@SdbpGetMatchingTextAttributes@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A202C5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2017A:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+41j
		mov	edx, eax
		mov	ecx, ebx
		call	SdbGetStringTagPtr
		mov	[ebp+var_10], eax
		test	eax, eax
		jz	loc_A2029B
		cmp	[eax], si
		jz	loc_A2029B
		mov	edx, [ebp+var_4]
		mov	ecx, ebx
		push	9013h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	[ebp+var_C], eax
		test	eax, eax
		jnz	short loc_A201B9
		push	offset ??_C@_0BN@IOMIMCFC@Failed?5to?5read?5text?5to?5match@NNGAKEGL@
		push	6D6h
		jmp	short loc_A20166
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A201B9:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+92j
		mov	edx, eax
		mov	ecx, ebx
		call	SdbGetTagDataSize
		mov	[ebp+var_8], eax
		test	eax, eax
		jnz	short loc_A201D5
		push	(offset	loc_8C2DF9+5)
		push	6DCh
		jmp	short loc_A20166
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A201D5:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+AEj
		push	ecx
		lea	edx, [eax+2]
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	edi, eax
		test	edi, edi
		jnz	short loc_A201F3
		push	offset ??_C@_0CI@OJKHAKHB@Failed?5to?5allocate?5memory?5for?5t@NNGAKEGL@
		push	6E2h
		jmp	loc_A20166
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A201F3:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+C9j
		push	[ebp+var_8]	; int
		mov	edx, [ebp+var_C]
		mov	ecx, ebx
		push	edi		; void *
		call	SdbReadBinaryTag
		test	eax, eax
		jnz	short loc_A20214
		mov	eax, 6E7h
		mov	ecx, offset ??_C@_0CC@MGLCBEGO@Failed?5to?5read?5matching?5text?5bl@NNGAKEGL@
		jmp	loc_A202A5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20214:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+EAj
		mov	edx, [ebp+var_4]
		mov	ecx, ebx
		push	4053h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jnz	short loc_A20233
		mov	eax, 6F0h
		mov	ecx, offset ??_C@_0BN@CECBNFLP@Failed?5to?5read?5text?5encoding@NNGAKEGL@
		jmp	short loc_A202A5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20233:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+10Cj
		push	esi
		mov	edx, eax
		mov	ecx, ebx
		call	SdbReadDWORDTag
		mov	[ebp+var_C], eax
		test	eax, eax
		jnz	short loc_A20250
		mov	eax, 6F6h
		mov	ecx, (offset loc_8C2D72+8)
		jmp	short loc_A202A5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20250:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+129j
		mov	edx, [ebp+var_4]
		mov	ecx, ebx
		push	4001h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	ecx, 2000h
		test	eax, eax
		jz	short loc_A20274
		push	ecx
		mov	edx, eax
		mov	ecx, ebx
		call	SdbReadDWORDTag
		mov	ecx, eax

loc_A20274:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+14Dj
		mov	edx, [ebp+arg_0]
		xor	esi, esi
		mov	eax, [ebp+var_10]
		inc	esi
		mov	[edx], eax
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_8]
		mov	[eax], edi
		mov	eax, [ebp+var_8]
		mov	[edx], eax
		mov	edx, [ebp+arg_C]
		mov	eax, [ebp+var_C]
		mov	[edx], eax
		mov	eax, [ebp+arg_10]
		mov	[eax], ecx
		jmp	short loc_A202C5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2029B:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+6Fj
					; SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+78j
		mov	eax, 6CDh
		mov	ecx, offset ??_C@_0CH@DKPEDAPC@Failed?5to?5read?5MATCHING_TEXT?5fi@NNGAKEGL@

loc_A202A5:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+F6j
					; SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+118j ...
		push	ecx
		push	eax
		push	offset ??_C@_0BO@OFDLBECN@SdbpGetMatchingTextAttributes@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		test	edi, edi
		jz	short loc_A202C5
		push	74705041h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A202C5:				; CODE XREF: SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+5Cj
					; SdbpGetMatchingTextAttributes(x,x,x,x,x,x,x)+180j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	14h
_SdbpGetMatchingTextAttributes@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetRegistryMatchingAttributes(x, x, x, x, x, x,	x, x, x, x)
_SdbpGetRegistryMatchingAttributes@40 proc near
					; CODE XREF: SdbpCheckMatchingRegistry(x,x,x,x,x,x,x)+55p
					; SdbpCheckMatchingWildcardRegistry(x,x,x,x,x,x,x)+55p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		push	esi
		xor	esi, esi
		mov	eax, edx
		push	edi
		mov	edi, ecx
		mov	[ebp+var_8], eax
		mov	ecx, [ebp+arg_0]
		mov	ebx, esi
		push	6001h
		mov	[ebp+var_C], esi
		mov	[ebp+var_10], esi
		mov	[ecx], esi
		mov	ecx, [ebp+arg_4]
		mov	[ebp+var_14], esi
		mov	[ebp+var_18], esi
		mov	[ebp+var_1C], esi
		mov	[ecx], esi
		mov	ecx, [ebp+arg_8]
		mov	[ebp+var_20], esi
		mov	[ebp+var_4], esi
		mov	[ecx], esi
		mov	ecx, [ebp+arg_C]
		mov	[ecx], esi
		mov	ecx, [ebp+arg_10]
		mov	[ecx], esi
		mov	ecx, [ebp+arg_14]
		mov	[ecx], esi
		mov	[ecx+4], esi
		mov	ecx, [ebp+arg_18]
		mov	[ecx], esi
		mov	ecx, [ebp+arg_1C]
		mov	[ecx], esi
		mov	ecx, edi
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jnz	short loc_A20343
		push	offset ??_C@_0BL@MDKIPEHO@Failed?5to?5get?5key?5path?5tag@NNGAKEGL@
		push	3C5h
		jmp	loc_A20558
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20343:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+64j
		mov	edx, eax
		mov	ecx, edi
		call	SdbGetStringTagPtr
		mov	[ebp+var_24], eax
		test	eax, eax
		jz	loc_A2054E
		cmp	[eax], si
		jz	loc_A2054E
		mov	edx, [ebp+var_8]
		mov	ecx, edi
		push	6030h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jz	short loc_A2037F
		mov	edx, eax
		mov	ecx, edi
		call	SdbGetStringTagPtr
		mov	[ebp+var_C], eax

loc_A2037F:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+A3j
		mov	edx, [ebp+var_8]
		mov	ecx, edi
		push	4051h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jz	loc_A20420
		push	esi
		mov	edx, eax
		mov	ecx, edi
		call	SdbReadDWORDTag
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_A203C3
		push	offset ??_C@_0BK@FFANNGGM@Failed?5to?5read?5value?5type@NNGAKEGL@
		push	3DEh

loc_A203B0:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+13Fj
					; SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+1B7j ...
		push	offset ??_C@_0CC@CENPHDLK@SdbpGetRegistryMatchingAttribut@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		mov	eax, esi
		jmp	loc_A20566
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A203C3:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+D6j
		cmp	ebx, 2
		jbe	loc_A204EF
		cmp	ebx, 3
		jz	loc_A20499
		cmp	ebx, 4
		jz	loc_A20468
		cmp	ebx, 7
		jz	loc_A204EF
		cmp	ebx, 0Bh
		jnz	loc_A2053F
		mov	edx, [ebp+var_8]
		mov	ecx, edi
		push	501Bh
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jnz	short loc_A2040F
		push	offset ??_C@_0CH@ENLBMAPM@Failed?5to?5get?5TAG_REG_VALUE_DAT@NNGAKEGL@ ; "Failed to get	TAG_REG_VALUE_DATA_QWORD"
		push	403h
		jmp	short loc_A203B0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2040F:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+133j
		push	esi
		push	esi
		mov	edx, eax
		mov	ecx, edi
		call	SdbReadQWORDTag
		mov	[ebp+var_14], eax
		mov	[ebp+var_18], edx

loc_A20420:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+C2j
					; SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+1C9j ...
		mov	edx, [ebp+arg_0]
		xor	eax, eax
		mov	ecx, [ebp+var_24]
		inc	eax
		mov	[edx], ecx
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+var_C]
		mov	[edx], ecx
		mov	ecx, [ebp+arg_8]
		mov	edx, [ebp+arg_10]
		mov	[ecx], ebx
		mov	ecx, [ebp+arg_C]
		mov	[ecx], esi
		mov	ecx, [ebp+var_10]
		mov	[edx], ecx
		mov	ecx, [ebp+arg_14]
		mov	edx, [ebp+var_14]
		mov	[ecx], edx
		mov	edx, [ebp+var_18]
		mov	[ecx+4], edx
		mov	edx, [ebp+arg_18]
		mov	ecx, [ebp+var_1C]
		mov	[edx], ecx
		mov	edx, [ebp+arg_1C]
		mov	ecx, [ebp+var_20]
		mov	[edx], ecx
		jmp	loc_A20569
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20468:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+10Aj
		mov	edx, [ebp+var_8]
		mov	ecx, edi
		push	4052h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jnz	short loc_A2048A
		push	(offset	loc_8C2AE3+1)
		push	3F9h
		jmp	loc_A203B0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2048A:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+1ABj
		push	esi
		mov	edx, eax
		mov	ecx, edi
		call	SdbReadDWORDTag
		mov	[ebp+var_10], eax
		jmp	short loc_A20420
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20499:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+101j
		mov	edx, [ebp+var_8]
		mov	ecx, edi
		push	9012h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	[ebp+var_20], eax
		test	eax, eax
		jnz	short loc_A204BE
		push	offset ??_C@_0CI@NHLCACFB@Failed?5to?5get?5TAG_REG_VALUE_DAT@NNGAKEGL@
		push	40Dh
		jmp	loc_A203B0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A204BE:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+1DFj
		mov	edx, eax
		mov	ecx, edi
		call	_SdbGetBinaryTagData@8 ; SdbGetBinaryTagData(x,x)
		mov	[ebp+var_1C], eax
		test	eax, eax
		jnz	short loc_A204DD
		push	(offset	loc_8C2AC9+1)
		push	413h
		jmp	loc_A203B0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A204DD:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+1FEj
		mov	edx, [ebp+var_20]
		mov	ecx, edi
		call	SdbGetTagDataSize
		mov	[ebp+var_20], eax
		jmp	loc_A20420
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A204EF:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+F8j
					; SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+113j
		mov	edx, [ebp+var_8]
		mov	ecx, edi
		push	6031h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jnz	short loc_A20511
		push	(offset	loc_8C2B24+2)
		push	3EBh
		jmp	loc_A203B0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20511:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+232j
		mov	edx, eax
		mov	ecx, edi
		call	SdbGetStringTagPtr
		mov	esi, eax
		test	esi, esi
		jnz	loc_A20420
		push	(offset	loc_8C2AC9+1)
		push	3F1h
		push	offset ??_C@_0CC@CENPHDLK@SdbpGetRegistryMatchingAttribut@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		mov	eax, [ebp+var_4]
		jmp	short loc_A20566
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2053F:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+11Cj
		push	(offset	loc_8C2A31+1)
		push	41Ah
		jmp	loc_A203B0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2054E:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+83j
					; SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+8Cj
		push	offset ??_C@_0BI@KFGKGOFP@Failed?5to?5read?5key?5path@NNGAKEGL@
		push	3CBh

loc_A20558:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+70j
		push	offset ??_C@_0CC@CENPHDLK@SdbpGetRegistryMatchingAttribut@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		mov	eax, ebx

loc_A20566:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+F0j
					; SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+26Fj
		add	esp, 10h

loc_A20569:				; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+195j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	20h
_SdbpGetRegistryMatchingAttributes@40 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpMatchDeviceDWORD(x, x, x, x, x,	x)
_SdbpMatchDeviceDWORD@24 proc near	; CODE XREF: SdbpCheckKObject+8A606p
					; SdbpCheckKObject+8A629p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_4]
		mov	edi, edx
		mov	ebx, ecx
		mov	edx, [ebp+arg_0]
		xor	esi, esi
		call	_SdbpGetDeviceDWORD@12 ; SdbpGetDeviceDWORD(x,x,x)
		cmp	eax, 0FFFFFFFFh
		jz	short loc_A20594
		cmp	eax, edi
		jnz	short loc_A205C3
		jmp	short loc_A205C0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20594:				; CODE XREF: SdbpMatchDeviceDWORD(x,x,x,x,x,x)+1Cj
		push	[ebp+arg_8]
		mov	edx, [ebp+arg_0]
		mov	ecx, ebx
		call	_SdbpGetDeviceDWORD@12 ; SdbpGetDeviceDWORD(x,x,x)
		cmp	eax, 0FFFFFFFFh
		jz	short loc_A205AA
		cmp	eax, edi
		jb	short loc_A205C3

loc_A205AA:				; CODE XREF: SdbpMatchDeviceDWORD(x,x,x,x,x,x)+34j
		push	[ebp+arg_C]
		mov	edx, [ebp+arg_0]
		mov	ecx, ebx
		call	_SdbpGetDeviceDWORD@12 ; SdbpGetDeviceDWORD(x,x,x)
		cmp	eax, 0FFFFFFFFh
		jz	short loc_A205C0
		cmp	eax, edi
		ja	short loc_A205C3

loc_A205C0:				; CODE XREF: SdbpMatchDeviceDWORD(x,x,x,x,x,x)+22j
					; SdbpMatchDeviceDWORD(x,x,x,x,x,x)+4Aj
		xor	esi, esi
		inc	esi

loc_A205C3:				; CODE XREF: SdbpMatchDeviceDWORD(x,x,x,x,x,x)+20j
					; SdbpMatchDeviceDWORD(x,x,x,x,x,x)+38j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	10h
_SdbpMatchDeviceDWORD@24 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpMatchDeviceString(x, x,	x, x)
_SdbpMatchDeviceString@16 proc near	; CODE XREF: SdbpCheckKObject+8A5CAp
					; SdbpCheckKObject+8A5E3p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_4]
		mov	edi, edx
		mov	ebx, ecx
		mov	edx, [ebp+arg_0]
		xor	esi, esi
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jz	short loc_A20608
		mov	edx, eax
		mov	ecx, ebx
		call	SdbGetStringTagPtr
		test	eax, eax
		jz	short loc_A2060B
		test	edi, edi
		jz	short loc_A2060B
		push	edi		; wchar_t *
		push	eax		; wchar_t *
		call	__wcsicmp
		pop	ecx
		pop	ecx
		test	eax, eax
		jnz	short loc_A2060B

loc_A20608:				; CODE XREF: SdbpMatchDeviceString(x,x,x,x)+1Cj
		xor	esi, esi
		inc	esi

loc_A2060B:				; CODE XREF: SdbpMatchDeviceString(x,x,x,x)+29j
					; SdbpMatchDeviceString(x,x,x,x)+2Dj ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	8
_SdbpMatchDeviceString@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpMatchOne(x, x, x, x, x,	x, x)
_SdbpMatchOne@28 proc near		; DATA XREF: .text:00404624o

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 0Ch
		push	esi
		call	_Feature_CompatBuildInVb__private_IsEnabledDeviceUsage@0 ; Feature_CompatBuildInVb__private_IsEnabledDeviceUsage()
		lea	edx, [esp+10h+var_8]
		push	ecx
		push	1
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		test	eax, eax
		jz	short loc_A20683
		and	[esp+28h+var_4], 0
		lea	ecx, [esp+28h+var_4]
		and	[esp+28h+var_8], 0
		call	_SdbpMatchList@32 ; SdbpMatchList(x,x,x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	short loc_A20676
		cmp	[esp+10h+var_8], 0
		jnz	short loc_A20676
		mov	edx, [ebp+arg_10]
		mov	ecx, [ebp+arg_8]
		push	1003h
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	ecx, eax
		neg	ecx
		sbb	ecx, ecx
		inc	ecx
		jmp	short loc_A2067A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20676:				; CODE XREF: SdbpMatchOne(x,x,x,x,x,x,x)+3Fj
					; SdbpMatchOne(x,x,x,x,x,x,x)+46j
		mov	ecx, [esp+10h+var_4]

loc_A2067A:				; CODE XREF: SdbpMatchOne(x,x,x,x,x,x,x)+5Fj
		mov	eax, [ebp+arg_0]
		mov	[eax], ecx
		mov	eax, esi
		jmp	short loc_A2068B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20683:				; CODE XREF: SdbpMatchOne(x,x,x,x,x,x,x)+26j
		mov	ecx, [ebp+arg_0]
		call	_SdbpMatchList@32 ; SdbpMatchList(x,x,x,x,x,x,x,x)

loc_A2068B:				; CODE XREF: SdbpMatchOne(x,x,x,x,x,x,x)+6Cj
		pop	esi
		mov	esp, ebp
		pop	ebp
		retn	1Ch
_SdbpMatchOne@28 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	SdbFindFirstNamedTag(__int16,int,wchar_t *)
_SdbFindFirstNamedTag@20 proc near	; CODE XREF: SdbpSearchDB+AF77Fp
					; SdbpSearchDB+AF856p ...

var_4		= dword	ptr -4
arg_0		= word ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	eax, edx
		xor	ebx, ebx
		push	edi
		mov	[ebp+var_4], eax
		mov	edi, ecx
		call	_SdbGetFirstChild@8 ; SdbGetFirstChild(x,x)
		jmp	short loc_A206F2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A206AC:				; CODE XREF: SdbFindFirstNamedTag(x,x,x,x,x)+64j
		mov	edx, esi
		mov	ecx, edi
		call	SdbGetTagFromTagID
		cmp	ax, [ebp+arg_0]
		jnz	short loc_A206E7
		push	[ebp+arg_4]
		mov	edx, esi
		mov	ecx, edi
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jz	short loc_A206E7
		mov	edx, eax
		mov	ecx, edi
		call	SdbGetStringTagPtr
		test	eax, eax
		jz	short loc_A206FE
		push	eax		; wchar_t *
		push	[ebp+arg_8]	; wchar_t *
		call	__wcsicmp
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_A206FA

loc_A206E7:				; CODE XREF: SdbFindFirstNamedTag(x,x,x,x,x)+27j
					; SdbFindFirstNamedTag(x,x,x,x,x)+37j
		mov	edx, [ebp+var_4]
		mov	ecx, edi
		push	esi
		call	SdbGetNextChild

loc_A206F2:				; CODE XREF: SdbFindFirstNamedTag(x,x,x,x,x)+18j
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A206AC
		jmp	short loc_A20717
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A206FA:				; CODE XREF: SdbFindFirstNamedTag(x,x,x,x,x)+53j
		mov	ebx, esi
		jmp	short loc_A20717
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A206FE:				; CODE XREF: SdbFindFirstNamedTag(x,x,x,x,x)+44j
		push	offset ??_C@_0BK@BHKCJLNO@Can?8t?5get?5the?5name?5string@NNGAKEGL@
		push	98h
		push	(offset	loc_8C360A+2)
		push	1
		call	AslLogCallPrintf
		add	esp, 10h

loc_A20717:				; CODE XREF: SdbFindFirstNamedTag(x,x,x,x,x)+66j
					; SdbFindFirstNamedTag(x,x,x,x,x)+6Aj
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebx
		leave
		retn	0Ch
_SdbFindFirstNamedTag@20 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	SdbpFindNextNamedTag(int,int,wchar_t *)
_SdbpFindNextNamedTag@20 proc near	; CODE XREF: SdbpSearchDB+AF7E1p
					; SdbpSearchDB+AF8B5p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, edx
		mov	edx, [ebp+arg_0]
		push	edi
		mov	[ebp+var_8], esi
		mov	edi, ecx
		call	SdbGetTagFromTagID
		push	[ebp+arg_0]
		movzx	ebx, ax
		mov	[ebp+var_4], ebx
		test	bx, bx
		jnz	short loc_A20764
		push	(offset	loc_8C3524+4)
		push	0C6h
		push	offset ??_C@_0BF@FGMJDGGO@SdbpFindNextNamedTag@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		xor	eax, eax
		jmp	short loc_A207D8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20764:				; CODE XREF: SdbpFindNextNamedTag(x,x,x,x,x)+25j
		mov	edx, esi
		jmp	short loc_A207AB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20768:				; CODE XREF: SdbpFindNextNamedTag(x,x,x,x,x)+96j
		mov	edx, esi
		mov	ecx, edi
		call	SdbGetTagFromTagID
		cmp	ax, bx
		jnz	short loc_A207A7
		push	[ebp+arg_4]
		mov	edx, esi
		mov	ecx, edi
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_A207A4
		mov	edx, ebx
		mov	ecx, edi
		call	SdbGetStringTagPtr
		test	eax, eax
		jz	short loc_A207BA
		push	eax		; wchar_t *
		push	[ebp+arg_8]	; wchar_t *
		call	__wcsicmp
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_A207D6

loc_A207A4:				; CODE XREF: SdbpFindNextNamedTag(x,x,x,x,x)+66j
		mov	ebx, [ebp+var_4]

loc_A207A7:				; CODE XREF: SdbpFindNextNamedTag(x,x,x,x,x)+54j
		mov	edx, [ebp+var_8]
		push	esi

loc_A207AB:				; CODE XREF: SdbpFindNextNamedTag(x,x,x,x,x)+46j
		mov	ecx, edi
		call	SdbGetNextChild
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A20768
		jmp	short loc_A207D4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A207BA:				; CODE XREF: SdbpFindNextNamedTag(x,x,x,x,x)+73j
		push	ebx
		push	offset ??_C@_0CG@ILCHFAAO@Can?8t?5get?5the?5name?5string?5tagid@NNGAKEGL@
		push	0D7h
		push	offset ??_C@_0BF@FGMJDGGO@SdbpFindNextNamedTag@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A207D4:				; CODE XREF: SdbpFindNextNamedTag(x,x,x,x,x)+98j
		xor	esi, esi

loc_A207D6:				; CODE XREF: SdbpFindNextNamedTag(x,x,x,x,x)+82j
		mov	eax, esi

loc_A207D8:				; CODE XREF: SdbpFindNextNamedTag(x,x,x,x,x)+42j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
_SdbpFindNextNamedTag@20 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall SdbGetBinaryTagData(x, x)
_SdbGetBinaryTagData@8 proc near	; CODE XREF: SdbpGetRegistryMatchingAttributes(x,x,x,x,x,x,x,x,x,x)+1F4p
		mov	edi, edi
		push	esi
		push	edi
		mov	esi, edx
		mov	edi, ecx
		call	SdbGetTagFromTagID
		mov	ecx, 0F000h
		mov	edx, esi
		and	ax, cx
		mov	ecx, 9000h
		cmp	ax, cx
		mov	ecx, edi
		jz	short loc_A2082A
		call	SdbGetTagFromTagID
		movzx	eax, ax
		push	eax
		push	esi
		push	(offset	loc_8C39D7+1)
		push	3B4h
		push	offset ??_C@_0BE@GHDFKEEC@SdbGetBinaryTagData@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 18h
		xor	eax, eax
		pop	edi
		pop	esi
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2082A:				; CODE XREF: SdbGetBinaryTagData(x,x)+21j
		pop	edi
		pop	esi
		jmp	SdbpGetMappedTagData
_SdbGetBinaryTagData@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	SdbReadGUIDTag(void *,int,int,int,int)
_SdbReadGUIDTag@24 proc	near		; CODE XREF: KsepDbGetDriverShimsInternal+AFCD8p
					; KsepDbGetShimInfo(x,x)+D3p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	edi
		mov	edi, [ebp+arg_0]
		xor	eax, eax
		push	10h		; int
		push	[ebp+arg_0]	; void *
		stosd
		stosd
		stosd
		stosd
		call	SdbReadBinaryTag
		test	eax, eax
		jnz	short loc_A20873
		push	esi
		push	(offset	loc_8C3675+1)
		push	0A7h
		push	(offset	loc_8C3689+1)
		push	1
		call	AslLogCallPrintf
		mov	edi, [ebp+arg_0]
		lea	esi, [ebp+arg_4]
		add	esp, 10h
		movsd
		movsd
		movsd
		movsd
		pop	esi

loc_A20873:				; CODE XREF: SdbReadGUIDTag(x,x,x,x,x,x)+1Bj
		mov	eax, [ebp+arg_0]
		pop	edi
		pop	ebp
		retn	14h
_SdbReadGUIDTag@24 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	SdbpGetProcessHistory(void *)
_SdbpGetProcessHistory@12 proc near	; CODE XREF: SdbpInitializeSearchDBContext+91F50p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		mov	eax, edx
		mov	[ebp+var_8], ecx
		push	esi
		mov	esi, eax
		mov	[ebp+var_14], eax
		xor	edx, edx
		push	edi
		mov	[ebp+var_4], edx
		lea	edi, [esi+2]

loc_A20898:				; CODE XREF: SdbpGetProcessHistory(x,x,x)+26j
		mov	ax, [esi]
		add	esi, 2
		cmp	ax, dx
		jnz	short loc_A20898
		mov	ebx, [ebp+arg_0]
		sub	esi, edi
		sar	esi, 1
		lea	ecx, [ebx+2]

loc_A208AD:				; CODE XREF: SdbpGetProcessHistory(x,x,x)+3Bj
		mov	ax, [ebx]
		add	ebx, 2
		cmp	ax, dx
		jnz	short loc_A208AD
		lea	eax, [ebp+var_4]
		sub	ebx, ecx
		mov	ecx, [ebp+var_8]
		push	eax		; int
		push	edx		; int
		push	edx		; void *
		push	11h		; int
		mov	edx, offset ??_C@_1CE@DAGHINBE@?$AA_?$AA_?$AAP?$AAR?$AAO?$AAC?$AAE?$AAS?$AAS?$AA_?$AAH?$AAI?$AAS?$AAT?$AAO@NNGAKEGL@
		sar	ebx, 1
		call	AslEnvVarQuery
		mov	[ebp+var_10], eax
		cmp	eax, 0C0000023h
		jnz	short loc_A208EB
		mov	ecx, [ebp+var_4]
		add	ecx, ebx
		add	ecx, esi
		lea	edx, ds:4[ecx*2]
		jmp	short loc_A208F5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A208EB:				; CODE XREF: SdbpGetProcessHistory(x,x,x)+5Ej
		lea	eax, [ebx+esi]
		lea	edx, ds:2[eax*2]

loc_A208F5:				; CODE XREF: SdbpGetProcessHistory(x,x,x)+6Ej
		push	ecx
		mov	[ebp+var_4], edx
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	[ebp+var_C], eax
		mov	edi, eax
		test	eax, eax
		jnz	short loc_A20924
		push	offset ??_C@_0CK@DJJDHFIA@Unable?5to?5allocate?5process?5hist@NNGAKEGL@
		push	8CCh
		push	offset ??_C@_0BG@JPAHFGJG@SdbpGetProcessHistory@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		xor	eax, eax
		jmp	short loc_A20996
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20924:				; CODE XREF: SdbpGetProcessHistory(x,x,x)+8Aj
		xor	ecx, ecx
		cmp	[ebp+var_10], 0C0000023h
		mov	[eax], cx
		jnz	short loc_A2096F
		mov	ecx, [ebp+var_4]
		lea	edx, [ebp+var_4]
		push	edx		; int
		mov	[ebp+var_4], ecx
		mov	edx, offset ??_C@_1CE@DAGHINBE@?$AA_?$AA_?$AAP?$AAR?$AAO?$AAC?$AAE?$AAS?$AAS?$AA_?$AAH?$AAI?$AAS?$AAT?$AAO@NNGAKEGL@
		shr	ecx, 1
		push	ecx		; int
		mov	ecx, [ebp+var_8]
		push	eax		; void *
		push	11h		; int
		call	AslEnvVarQuery
		test	eax, eax
		js	short loc_A2096F
		mov	ecx, [ebp+var_C]
		mov	eax, [ebp+var_4]
		push	3Bh
		lea	eax, [ecx+eax*2]
		lea	edi, [eax-2]
		pop	ecx
		cmp	[edi], cx
		jz	short loc_A2096C
		mov	edi, eax
		mov	[edi], cx

loc_A2096C:				; CODE XREF: SdbpGetProcessHistory(x,x,x)+EAj
		add	edi, 2

loc_A2096F:				; CODE XREF: SdbpGetProcessHistory(x,x,x)+B5j
					; SdbpGetProcessHistory(x,x,x)+D6j
		add	esi, esi
		push	esi		; size_t
		push	[ebp+var_14]	; void *
		push	edi		; void *
		call	_memmove
		add	edi, esi
		lea	esi, [ebx+ebx]
		push	esi		; size_t
		push	[ebp+arg_0]	; void *
		push	edi		; void *
		call	_memmove
		add	esp, 18h
		xor	eax, eax
		mov	[esi+edi], ax
		mov	eax, [ebp+var_C]

loc_A20996:				; CODE XREF: SdbpGetProcessHistory(x,x,x)+A7j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
_SdbpGetProcessHistory@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbGuestHostArchsToRuntimePlatformFlag(x, x)
_SdbGuestHostArchsToRuntimePlatformFlag@8 proc near
					; CODE XREF: SdbGuestTargetPlatformFlagsToRuntimePlatformFlags(x)+62p

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		mov	si, cx
		mov	ecx, 0FFFFh
		cmp	si, cx
		jz	short loc_A209F0
		mov	[ebp+var_4], ecx
		test	edx, edx
		jz	short loc_A209C5
		movzx	eax, word ptr [edx]
		mov	edx, eax
		mov	[ebp+var_4], edx
		cmp	ax, cx
		jnz	short loc_A209F8

loc_A209C5:				; CODE XREF: SdbGuestHostArchsToRuntimePlatformFlag(x,x)+19j
		sub	esp, 0Ch
		lea	ecx, [ebp+var_4]
		xor	edx, edx
		call	AslEnvGetProcessWowInfo
		test	eax, eax
		jns	short loc_A209F5
		push	eax
		push	offset ??_C@_0EA@NDEIOECD@AslEnvGetProcessWowInfo?5failed?5@NNGAKEGL@
		push	0F9h
		push	offset ??_C@_0CH@COPFLLI@SdbGuestHostArchsToRuntimePlatf@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A209F0:				; CODE XREF: SdbGuestHostArchsToRuntimePlatformFlag(x,x)+12j
					; SdbGuestHostArchsToRuntimePlatformFlag(x,x)+76j
		xor	eax, eax

loc_A209F2:				; CODE XREF: SdbGuestHostArchsToRuntimePlatformFlag(x,x)+81j
		pop	esi
		leave
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A209F5:				; CODE XREF: SdbGuestHostArchsToRuntimePlatformFlag(x,x)+37j
		mov	edx, [ebp+var_4]

loc_A209F8:				; CODE XREF: SdbGuestHostArchsToRuntimePlatformFlag(x,x)+26j
		xor	eax, eax
		mov	ecx, offset word_42E9E6

loc_A209FF:				; CODE XREF: SdbGuestHostArchsToRuntimePlatformFlag(x,x)+74j
		cmp	si, [ecx-2]
		jnz	short loc_A20A0A
		cmp	dx, [ecx]
		jz	short loc_A20A15

loc_A20A0A:				; CODE XREF: SdbGuestHostArchsToRuntimePlatformFlag(x,x)+66j
		inc	eax
		add	ecx, 10h
		cmp	eax, 8
		jb	short loc_A209FF
		jmp	short loc_A209F0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20A15:				; CODE XREF: SdbGuestHostArchsToRuntimePlatformFlag(x,x)+6Bj
		shl	eax, 4
		mov	eax, ds:dword_42E9E8[eax]
		jmp	short loc_A209F2
_SdbGuestHostArchsToRuntimePlatformFlag@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbGuestTargetPlatformFlagsToRuntimePlatformFlags(x)
_SdbGuestTargetPlatformFlagsToRuntimePlatformFlags@4 proc near
					; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+116p

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	edi
		sub	esp, 0Ch
		lea	ecx, [ebp+var_4]
		xor	edi, edi
		xor	edx, edx
		mov	[ebp+var_4], edi
		call	AslEnvGetProcessWowInfo
		test	eax, eax
		jns	short loc_A20A59
		push	eax
		push	offset ??_C@_0EA@NDEIOECD@AslEnvGetProcessWowInfo?5failed?5@NNGAKEGL@
		push	146h
		push	offset ??_C@_0DC@EODMJGNB@SdbGuestTargetPlatformFlagsToRu@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A20A92
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20A59:				; CODE XREF: SdbGuestTargetPlatformFlagsToRuntimePlatformFlags(x)+1Bj
		push	esi
		mov	esi, edi

loc_A20A5C:				; CODE XREF: SdbGuestTargetPlatformFlagsToRuntimePlatformFlags(x)+6Fj
		test	ds:byte_42EA68[esi], 1Fh
		jz	short loc_A20A89
		mov	dx, ds:word_42EA64[esi]
		lea	ecx, [ebp+var_4]
		call	_AslEnvVerifyGuestProcessorSupport@8 ; AslEnvVerifyGuestProcessorSupport(x,x)
		test	eax, eax
		js	short loc_A20A89
		mov	cx, ds:word_42EA64[esi]
		lea	edx, [ebp+var_4]
		call	_SdbGuestHostArchsToRuntimePlatformFlag@8 ; SdbGuestHostArchsToRuntimePlatformFlag(x,x)
		or	edi, eax

loc_A20A89:				; CODE XREF: SdbGuestTargetPlatformFlagsToRuntimePlatformFlags(x)+43j
					; SdbGuestTargetPlatformFlagsToRuntimePlatformFlags(x)+56j
		add	esi, 0Ch
		cmp	esi, 3Ch
		jb	short loc_A20A5C
		pop	esi

loc_A20A92:				; CODE XREF: SdbGuestTargetPlatformFlagsToRuntimePlatformFlags(x)+37j
		mov	eax, edi
		pop	edi
		leave
		retn
_SdbGuestTargetPlatformFlagsToRuntimePlatformFlags@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCloseLocalDatabaseEx(x,	x, x)
_SdbpCloseLocalDatabaseEx@12 proc near	; CODE XREF: SdbpCleanupLocalDatabaseSupport+AF369p
					; SdbpCleanupLocalDatabaseSupport+AF37Dp ...

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		mov	esi, ecx
		push	edi
		cmp	ebx, 10h
		jnb	short loc_A20AEC
		xor	eax, eax
		mov	ecx, ebx
		inc	eax
		shl	eax, cl
		test	[esi+10h], eax
		jz	short loc_A20AEC
		imul	eax, ebx, 18h
		lea	edi, [esi+14h]
		add	edi, eax
		test	byte ptr [edi+14h], 2
		jz	short loc_A20ACF
		mov	ecx, [edi+10h]
		test	ecx, ecx
		jz	short loc_A20ACF
		call	SdbCloseDatabaseRead

loc_A20ACF:				; CODE XREF: SdbpCloseLocalDatabaseEx(x,x,x)+2Aj
					; SdbpCloseLocalDatabaseEx(x,x,x)+31j
		push	6
		xor	eax, eax
		pop	ecx
		rep stosd
		mov	ecx, [esi+10h]
		btr	ecx, ebx
		mov	[esi+10h], ecx
		cmp	ebx, 1
		jnz	short loc_A20AE7
		and	[esi+8], eax

loc_A20AE7:				; CODE XREF: SdbpCloseLocalDatabaseEx(x,x,x)+4Bj
		xor	eax, eax
		inc	eax
		jmp	short loc_A20AEE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20AEC:				; CODE XREF: SdbpCloseLocalDatabaseEx(x,x,x)+10j
					; SdbpCloseLocalDatabaseEx(x,x,x)+1Cj
		xor	eax, eax

loc_A20AEE:				; CODE XREF: SdbpCloseLocalDatabaseEx(x,x,x)+53j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
_SdbpCloseLocalDatabaseEx@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpOpenLocalDatabaseEx(x, x, x, x,	x)
_SdbpOpenLocalDatabaseEx@20 proc near	; CODE XREF: SdbTagRefToTagID+8453Bp

var_23C		= dword	ptr -23Ch
var_238		= dword	ptr -238h
var_234		= dword	ptr -234h
var_230		= dword	ptr -230h
var_22C		= dword	ptr -22Ch
var_228		= dword	ptr -228h
var_224		= dword	ptr -224h
var_214		= dword	ptr -214h
var_8		= dword	ptr -8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 240h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_4]
		push	ebx
		mov	[ebp+var_23C], eax
		xor	eax, eax
		push	esi
		push	edi
		lea	edi, [ebp+var_224]
		mov	[ebp+var_230], edx
		stosd
		mov	esi, ecx
		mov	ecx, [ebp+arg_8]
		mov	[ebp+var_234], esi
		mov	[ebp+var_238], ecx
		stosd
		mov	ebx, [ecx]
		stosd
		stosd
		xor	eax, eax
		mov	[ebp+var_228], eax
		mov	[ebp+var_22C], eax
		test	ebx, 0F0000000h
		jz	short loc_A20B54
		shr	ebx, 1Ch

loc_A20B54:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+5Aj
		push	ebx
		cmp	ebx, 10h
		jb	short loc_A20B69
		push	offset ??_C@_0BA@FCOGLIBF@Bad?5index?50x?$CFlx@NNGAKEGL@
		push	3FBh
		jmp	loc_A20C89
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20B69:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+63j
		mov	ecx, esi
		call	_SdbpCloseLocalDatabaseEx@12 ; SdbpCloseLocalDatabaseEx(x,x,x)
		mov	edx, [ebp+var_230] ; void *
		lea	eax, [ebp+var_214]
		push	ecx		; int
		push	eax		; int
		lea	eax, [ebp+var_22C]
		mov	ecx, esi	; int
		push	eax		; int
		lea	eax, [ebp+var_228]
		push	eax		; int
		call	_SdbResolveDatabaseEx@24 ; SdbResolveDatabaseEx(x,x,x,x,x,x)
		test	eax, eax
		jz	loc_A20C7E
		cmp	eax, 104h
		jnb	loc_A20C7E
		mov	eax, 7FFFh
		cmp	[esi+1A8h], ax
		jz	short loc_A20BDF
		mov	eax, [esi+194h]
		test	[ebp+var_22C], eax
		jnz	short loc_A20BDF
		lea	eax, [ebp+var_214]
		push	eax
		push	(offset	loc_8C3B47+1)
		push	432h
		push	offset ??_C@_0BI@JKJMGENA@SdbpOpenLocalDatabaseEx@NNGAKEGL@
		push	3
		jmp	loc_A20C90
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20BDF:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+BDj
					; SdbpOpenLocalDatabaseEx(x,x,x,x,x)+CBj
		push	ecx
		push	ecx
		lea	ecx, [ebp+var_214]
		call	_SdbOpenDatabaseEx@16 ;	SdbOpenDatabaseEx(x,x,x,x)
		mov	ecx, eax
		test	ecx, ecx
		jnz	short loc_A20C10
		push	offset ??_C@_0BI@GIECIBFC@Failed?5to?5open?5database@NNGAKEGL@
		push	442h
		push	offset ??_C@_0BI@JKJMGENA@SdbpOpenLocalDatabaseEx@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A20C98
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20C10:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+FBj
		imul	edx, ebx, 18h
		lea	edi, [esi+14h]
		add	edi, edx
		mov	[ebp+var_228], edx
		mov	[edx+esi+24h], ecx
		mov	dword ptr [edx+esi+28h], 2
		xor	edx, edx
		mov	eax, [esi+10h]
		inc	edx
		bts	eax, ebx
		mov	[esi+10h], eax
		mov	eax, [ebp+var_230]
		test	eax, eax
		jz	short loc_A20C58
		mov	esi, eax
		mov	eax, [ebp+var_228]
		movsd
		movsd
		movsd
		movsd
		mov	esi, [ebp+var_234]
		or	[eax+esi+28h], edx
		jmp	short loc_A20C5E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20C58:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+149j
		xor	eax, eax
		stosd
		stosd
		stosd
		stosd

loc_A20C5E:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+161j
		cmp	ebx, edx
		jnz	short loc_A20C65
		mov	[esi+8], ecx

loc_A20C65:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+16Bj
		mov	eax, [ebp+var_238]
		shl	ebx, 1Ch
		mov	[eax], ebx
		mov	eax, [ebp+var_23C]
		test	eax, eax
		jz	short loc_A20C9A
		mov	[eax], ecx
		jmp	short loc_A20C9A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20C7E:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+A0j
					; SdbpOpenLocalDatabaseEx(x,x,x,x,x)+ABj
		push	eax
		push	offset ??_C@_0DC@EIBCFMBP@Cannot?5resolve?5database?0?5the?5pa@NNGAKEGL@
		push	41Dh

loc_A20C89:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+6Fj
		push	offset ??_C@_0BI@JKJMGENA@SdbpOpenLocalDatabaseEx@NNGAKEGL@
		push	1

loc_A20C90:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+E5j
		call	AslLogCallPrintf
		add	esp, 14h

loc_A20C98:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+116j
		xor	edx, edx

loc_A20C9A:				; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+183j
					; SdbpOpenLocalDatabaseEx(x,x,x,x,x)+187j
		mov	ecx, [ebp+var_8]
		mov	eax, edx
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	0Ch
_SdbpOpenLocalDatabaseEx@20 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbGetPathCustomSdb(x, x, x, x)
_SdbGetPathCustomSdb@16	proc near	; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+261p

var_5C		= dword	ptr -5Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 5Ch
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		mov	ebx, [ebp+arg_4]
		lea	eax, [ebp+var_5C]
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	56h		; size_t
		push	0		; int
		push	eax		; void *
		mov	edi, ecx
		call	_memset
		add	esp, 0Ch
		test	esi, esi
		jz	short loc_A20D09
		push	esi
		lea	ecx, [ebp+var_5C]
		call	_SdbpGetCustomSdbFileName@12 ; SdbpGetCustomSdbFileName(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A20D09
		push	esi
		push	(offset	loc_8C3F1F+3)
		push	5F8h

loc_A20CF8:				; CODE XREF: SdbGetPathCustomSdb(x,x,x,x)+7Cj
		push	offset ??_C@_0BE@MNHDHJED@SdbGetPathCustomSdb@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A20D2D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20D09:				; CODE XREF: SdbGetPathCustomSdb(x,x,x,x)+2Fj
					; SdbGetPathCustomSdb(x,x,x,x)+3Ej
		push	ebx
		lea	eax, [ebp+var_5C]
		push	eax
		push	ecx
		push	7
		mov	ecx, edi
		call	_SdbpGetSystemSdbFilePath@24 ; SdbpGetSystemSdbFilePath(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A20D2B
		push	esi
		push	(offset	loc_8C3E63+1)
		push	604h
		jmp	short loc_A20CF8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20D2B:				; CODE XREF: SdbGetPathCustomSdb(x,x,x,x)+6Fj
		xor	esi, esi

loc_A20D2D:				; CODE XREF: SdbGetPathCustomSdb(x,x,x,x)+5Aj
		mov	ecx, [ebp+var_4]
		not	esi
		shr	esi, 1Fh
		xor	ecx, ebp
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	8
_SdbGetPathCustomSdb@16	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __fastcall SdbResolveDatabaseEx(int,void *,int,int,int,int)
_SdbResolveDatabaseEx@24 proc near	; CODE XREF: SdbpOpenLocalDatabaseEx(x,x,x,x,x)+99p

var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 44h
		push	ebx
		push	esi
		xor	esi, esi
		mov	[ebp+var_C], edx
		push	edi
		mov	edi, [ebp+arg_8]
		xor	eax, eax
		mov	[ebp+var_14], ecx
		mov	[ebp+var_8], esi
		mov	[ebp+var_10], esi
		mov	[ebp+var_18], esi
		mov	[ebp+var_4], esi
		mov	[ebp+var_20], esi
		mov	[ebp+var_1C], esi
		mov	[ebp+var_28], esi
		mov	[ebp+var_24], esi
		test	edi, edi
		jz	loc_A2100E
		mov	[edi], ax
		mov	ebx, esi
		mov	eax, offset off_6B37B8
		mov	[ebp+arg_8], eax

loc_A20D8A:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+66j
		push	10h		; size_t
		push	edx		; void *
		push	dword ptr [eax]	; void *
		call	_memcmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A20DDF
		mov	eax, [ebp+arg_8]
		inc	ebx
		mov	edx, [ebp+var_C]
		add	eax, 10h
		mov	[ebp+arg_8], eax
		cmp	ebx, 3
		jb	short loc_A20D8A

loc_A20DAD:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+B7j
		mov	edx, [ebp+var_C]
		lea	ecx, [ebp+var_28]
		call	_AslGuidToString_UStr@8	; AslGuidToString_UStr(x,x)
		test	eax, eax
		jns	loc_A20E74
		push	eax
		push	offset ??_C@_0CG@CEIAABEP@Failed?5to?5convert?5guid?5to?5strin@NNGAKEGL@
		push	7D4h

loc_A20DCB:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+153j
		push	(offset	loc_8C40DC+6)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A20FDE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20DDF:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+54j
		shl	ebx, 4
		mov	eax, dword_6B37BC[ebx]
		mov	ecx, dword_6B37C4[ebx]
		mov	ebx, dword_6B37C0[ebx]
		mov	[ebp+arg_8], eax
		mov	[ebp+var_8], eax
		test	ecx, ecx
		jz	short loc_A20DAD
		mov	eax, [ebp+var_14]
		add	eax, 1A8h
		push	eax
		push	esi
		push	ecx
		push	ecx
		mov	ecx, edi
		call	_SdbpGetSystemSdbFilePath@24 ; SdbpGetSystemSdbFilePath(x,x,x,x,x,x)
		test	eax, eax
		js	short loc_A20E2B
		lea	ecx, [edi+2]

loc_A20E18:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+DCj
		mov	ax, [edi]
		add	edi, 2
		cmp	ax, si
		jnz	short loc_A20E18
		mov	esi, edi
		sub	esi, ecx
		sar	esi, 1
		jmp	short loc_A20E44
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20E2B:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+CEj
		push	(offset	loc_8C40C5+1)
		push	7BDh
		push	(offset	loc_8C40DC+6)
		push	1
		call	AslLogCallPrintf
		add	esp, 10h

loc_A20E44:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+E4j
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A20E50
		mov	ecx, [ebp+arg_8]
		mov	[eax], ecx

loc_A20E50:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+104j
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jz	loc_A2100C
		call	_SdbGuestTargetPlatformFlagsToRuntimePlatformFlags@4 ; SdbGuestTargetPlatformFlagsToRuntimePlatformFlags(x)
		mov	[edi], eax
		test	ebx, ebx
		jz	loc_A2100C
		and	eax, 1Bh
		mov	[edi], eax
		jmp	loc_A2100C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20E74:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+75j
		movzx	ebx, word ptr [ebp+var_28]
		add	ebx, 0B8h
		push	ecx
		mov	edx, ebx
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	[ebp+var_18], eax
		test	eax, eax
		jnz	short loc_A20E9D
		push	ebx
		push	(offset	loc_8C409B+1)
		push	7E9h
		jmp	loc_A20DCB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20E9D:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+146j
		mov	[ebp+var_1C], eax
		xor	eax, eax
		mov	word ptr [ebp+var_20], ax
		lea	eax, [ebp+var_20]
		push	(offset	loc_8C3FA1+1) ;	void *
		push	eax		; int
		mov	word ptr [ebp+var_20+2], bx
		call	_RtlAppendUnicodeToString@8 ; RtlAppendUnicodeToString(x,x)
		push	offset ??_C@_13FPGAJAPJ@?$AA?2@NNGAKEGL@ ; void	*
		lea	eax, [ebp+var_20]
		push	eax		; int
		call	_RtlAppendUnicodeToString@8 ; RtlAppendUnicodeToString(x,x)
		lea	eax, [ebp+var_28]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		call	_RtlAppendUnicodeStringToString@8 ; RtlAppendUnicodeStringToString(x,x)
		lea	eax, [ebp+var_20]
		mov	[ebp+var_40], 18h
		mov	[ebp+var_38], eax
		lea	eax, [ebp+var_40]
		push	eax
		push	80000100h
		lea	eax, [ebp+var_4]
		mov	[ebp+var_3C], esi
		push	eax
		mov	[ebp+var_34], 240h
		mov	[ebp+var_30], esi
		mov	[ebp+var_2C], esi
		call	_ZwOpenKey@12	; ZwOpenKey(x,x,x)
		test	eax, eax
		jns	short loc_A20F28
		push	eax
		push	[ebp+var_1C]
		push	offset ??_C@_0BO@OHGFJCDI@Failed?5to?5open?5Key?5?$CC?$CFws?$CC?5?$FL?$CFx?$FN@NNGAKEGL@ ; "Failed to open Key \"%ws\" [%x]"
		push	7F9h
		push	(offset	loc_8C40DC+6)
		push	1
		call	AslLogCallPrintf
		add	esp, 18h
		jmp	loc_A20FDE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20F28:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+1BFj
		mov	ebx, [ebp+arg_0]
		test	ebx, ebx
		jz	short loc_A20F6B
		mov	edx, [ebp+var_4]
		lea	ecx, [ebp+var_8]
		push	offset _g_ustrDatabaseType
		call	_AslRegistryGetUInt32_UStr@12 ;	AslRegistryGetUInt32_UStr(x,x,x)
		test	eax, eax
		jns	short loc_A20F61
		push	eax
		push	offset ??_C@_0CB@HAJBCKAO@Failed?5to?5get?5database?5type?5?$FL?$CFx@NNGAKEGL@
		push	805h

loc_A20F4E:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+24Cj
		push	(offset	loc_8C40DC+6)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		mov	[ebx], esi
		jmp	short loc_A20FDE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20F61:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+1FCj
		mov	eax, [ebp+var_8]
		and	eax, 7FFFFFFFh
		mov	[ebx], eax

loc_A20F6B:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+1E8j
		mov	ebx, [ebp+arg_4]
		test	ebx, ebx
		jz	short loc_A20F98
		mov	edx, [ebp+var_4]
		lea	ecx, [ebp+var_10]
		push	offset _g_ustrRuntimePlatform
		call	_AslRegistryGetUInt32_UStr@12 ;	AslRegistryGetUInt32_UStr(x,x,x)
		test	eax, eax
		jns	short loc_A20F93
		push	eax
		push	offset ??_C@_0CE@HLHNCJNF@Failed?5to?5get?5runtime?5platform?5@NNGAKEGL@
		push	815h
		jmp	short loc_A20F4E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20F93:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+23Fj
		mov	eax, [ebp+var_10]
		mov	[ebx], eax

loc_A20F98:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+22Bj
		mov	eax, [ebp+var_14]
		mov	ecx, edi
		add	eax, 1A8h
		push	eax
		push	[ebp+var_C]
		call	_SdbGetPathCustomSdb@16	; SdbGetPathCustomSdb(x,x,x,x)
		test	eax, eax
		jnz	short loc_A20FCA
		push	offset ??_C@_0DF@OGEFBPKL@SdbGetPathCustomSdb?5failed?5to?5g@NNGAKEGL@
		push	81Eh
		push	(offset	loc_8C40DC+6)
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A20FDE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A20FCA:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+268j
		lea	ecx, [edi+2]

loc_A20FCD:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+291j
		mov	ax, [edi]
		add	edi, 2
		cmp	ax, si
		jnz	short loc_A20FCD
		mov	esi, edi
		sub	esi, ecx
		sar	esi, 1

loc_A20FDE:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+95j
					; SdbResolveDatabaseEx(x,x,x,x,x,x)+1DEj ...
		cmp	[ebp+var_4], 0
		jz	short loc_A20FEC
		push	[ebp+var_4]
		call	_ZwClose@4	; ZwClose(x)

loc_A20FEC:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+29Dj
		mov	eax, [ebp+var_18]
		test	eax, eax
		jz	short loc_A20FFE
		push	74705041h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A20FFE:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+2ACj
		cmp	[ebp+var_24], 0
		jz	short loc_A2100C
		lea	ecx, [ebp+var_28]
		call	_AslUnicodeStringFree@4	; AslUnicodeStringFree(x)

loc_A2100C:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+110j
					; SdbResolveDatabaseEx(x,x,x,x,x,x)+11Fj ...
		mov	eax, esi

loc_A2100E:				; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+32j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
_SdbResolveDatabaseEx@24 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetCustomSdbFileName(x,	x, x)
_SdbpGetCustomSdbFileName@12 proc near	; CODE XREF: SdbGetPathCustomSdb(x,x,x,x)+35p

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		push	[ebp+arg_0]	; int
		mov	edi, ecx
		xor	eax, eax
		push	2Bh
		pop	edx
		mov	[edi], ax
		call	AslGuidToString
		mov	esi, eax
		test	esi, esi
		jns	short loc_A21050
		push	esi
		push	offset ??_C@_0BM@KAMLNOAN@AslGuidToString?5failed?5?$FL?$CFx?$FN@NNGAKEGL@ ; "AslGuidToString failed [%x]"
		push	32Bh

loc_A2103F:				; CODE XREF: SdbpGetCustomSdbFileName(x,x,x)+5Bj
		push	offset ??_C@_0BJ@GFHGNMMI@SdbpGetCustomSdbFileName@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A21074
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21050:				; CODE XREF: SdbpGetCustomSdbFileName(x,x,x)+1Dj
		push	offset ??_C@_19GNHEEAFN@?$AA?4?$AAs?$AAd?$AAb@NNGAKEGL@
		push	2Bh
		pop	edx
		mov	ecx, edi
		call	_RtlStringCchCatW@12 ; RtlStringCchCatW(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A21072
		push	esi
		push	offset ??_C@_0BN@IGBCHOAA@RtlStringCchCatW?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	331h
		jmp	short loc_A2103F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21072:				; CODE XREF: SdbpGetCustomSdbFileName(x,x,x)+4Ej
		xor	esi, esi

loc_A21074:				; CODE XREF: SdbpGetCustomSdbFileName(x,x,x)+39j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebp
		retn	4
_SdbpGetCustomSdbFileName@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetPathAppPatch(x, x, x, x)
_SdbpGetPathAppPatch@16	proc near	; CODE XREF: SdbpGetPathAppPatchPreRS3(x,x,x,x)+129p
					; SdbpGetPathCustomSdbPreRS3(x,x,x,x)+109p ...

var_220		= dword	ptr -220h
var_18		= dword	ptr -18h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 220h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		cmp	[ebp+arg_4], 0Ah
		mov	edx, [ebp+arg_8]
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		push	5
		pop	ecx
		mov	esi, offset ??_C@_1BE@MMECJMEH@?$AA?2?$AAA?$AAp?$AAp?$AAP?$AAa?$AAt?$AAc?$AAh@NNGAKEGL@
		lea	edi, [ebp+var_18]
		rep movsd
		jnb	short loc_A210B4
		mov	eax, 0C0000023h
		jmp	short loc_A21123
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A210B4:				; CODE XREF: SdbpGetPathAppPatch(x,x,x,x)+2Fj
		xor	eax, eax
		mov	word ptr [ebp+var_220],	ax
		mov	[ebx], ax
		test	edx, edx
		jnz	short loc_A210C9
		mov	edx, offset ??_C@_11LOCGONAA@@NNGAKEGL@

loc_A210C9:				; CODE XREF: SdbpGetPathAppPatch(x,x,x,x)+46j
		push	104h
		lea	eax, [ebp+var_220]
		push	eax
		lea	ecx, [ebp+var_18]
		call	_AslPathCombine@16 ; AslPathCombine(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A210F0
		push	esi
		push	offset ??_C@_0BL@IPDIPDIN@AslPathCombine?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	3ABh
		jmp	short loc_A21112
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A210F0:				; CODE XREF: SdbpGetPathAppPatch(x,x,x,x)+65j
		mov	edx, [ebp+arg_4] ; int
		lea	eax, [ebp+var_220]
		push	eax		; int
		mov	ecx, ebx	; void *
		call	_AslPathToSystemPathBuf@12 ; AslPathToSystemPathBuf(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A21121
		push	esi
		push	offset ??_C@_0CD@JEFPKOCA@AslPathToSystemPathBuf?5failed?5?$FL@NNGAKEGL@
		push	3B1h

loc_A21112:				; CODE XREF: SdbpGetPathAppPatch(x,x,x,x)+72j
		push	offset ??_C@_0BE@MLFMMAEH@SdbpGetPathAppPatch@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A21121:				; CODE XREF: SdbpGetPathAppPatch(x,x,x,x)+89j
		mov	eax, esi

loc_A21123:				; CODE XREF: SdbpGetPathAppPatch(x,x,x,x)+36j
		mov	ecx, [ebp+var_4]
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	10h
_SdbpGetPathAppPatch@16	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetPathAppraiser(x, x, x, x)
_SdbpGetPathAppraiser@16 proc near	; DATA XREF: .text:00404EF8o
					; .text:00404EFCo

var_230		= dword	ptr -230h
var_22C		= dword	ptr -22Ch
var_228		= dword	ptr -228h
var_224		= dword	ptr -224h
var_1C		= dword	ptr -1Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 230h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		cmp	[ebp+arg_4], 0Bh
		push	ebx
		push	esi
		push	edi
		mov	eax, [ebp+arg_C]
		lea	edi, [ebp+var_1C]
		push	5
		mov	ebx, [ebp+arg_0]
		mov	esi, offset ??_C@_1BG@KDDEGGCL@?$AA?2?$AAa?$AAp?$AAp?$AAr?$AAa?$AAi?$AAs?$AAe?$AAr@NNGAKEGL@
		mov	edx, [ebp+arg_8]
		pop	ecx
		rep movsd
		mov	[ebp+var_230], eax
		movsw
		jnb	short loc_A2117A
		mov	eax, 0C0000023h
		jmp	loc_A21222
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2117A:				; CODE XREF: SdbpGetPathAppraiser(x,x,x,x)+3Aj
		xor	eax, eax
		mov	[ebx], ax
		mov	word ptr [ebp+var_224],	ax
		mov	eax, 0FFFFh
		mov	[ebp+var_22C], eax
		mov	[ebp+var_228], eax
		test	edx, edx
		jnz	short loc_A211A0
		mov	edx, offset ??_C@_11LOCGONAA@@NNGAKEGL@

loc_A211A0:				; CODE XREF: SdbpGetPathAppraiser(x,x,x,x)+65j
		push	104h
		lea	eax, [ebp+var_224]
		push	eax
		lea	ecx, [ebp+var_1C]
		call	_AslPathCombine@16 ; AslPathCombine(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A211D6
		push	esi
		push	offset ??_C@_0BL@IPDIPDIN@AslPathCombine?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	4BBh

loc_A211C5:				; CODE XREF: SdbpGetPathAppraiser(x,x,x,x)+CAj
		push	(offset	loc_8C3ED4+2)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A21220
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A211D6:				; CODE XREF: SdbpGetPathAppraiser(x,x,x,x)+84j
		push	[ebp+var_230]
		lea	edx, [ebp+var_228]
		lea	ecx, [ebp+var_22C]
		call	_SdbpGetProcessHostGuestArchitectures@12 ; SdbpGetProcessHostGuestArchitectures(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A21200
		push	esi
		push	offset ??_C@_0DB@LPCMCBIC@SdbpGetProcessHostGuestArchitec@NNGAKEGL@
		push	4C1h
		jmp	short loc_A211C5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21200:				; CODE XREF: SdbpGetPathAppraiser(x,x,x,x)+BDj
		mov	edx, [ebp+arg_4]
		lea	eax, [ebp+var_228]
		push	eax
		push	[ebp+var_22C]
		lea	eax, [ebp+var_224]
		mov	ecx, ebx
		push	eax
		call	_AslEnvGetSysNativeDirPathForGuestBuf@20 ; AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)
		mov	esi, eax

loc_A21220:				; CODE XREF: SdbpGetPathAppraiser(x,x,x,x)+A0j
		mov	eax, esi

loc_A21222:				; CODE XREF: SdbpGetPathAppraiser(x,x,x,x)+41j
		mov	ecx, [ebp+var_4]
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	10h
_SdbpGetPathAppraiser@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetPathCustomSdb(x, x, x, x)
_SdbpGetPathCustomSdb@16 proc near	; DATA XREF: .text:00404F08o

var_224		= dword	ptr -224h
var_1C		= dword	ptr -1Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 224h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		cmp	[ebp+arg_4], 0Bh
		push	ebx
		push	esi
		push	edi
		push	5
		mov	ebx, [ebp+arg_0]
		lea	edi, [ebp+var_1C]
		mov	edx, [ebp+arg_8]
		mov	esi, offset ??_C@_1BG@GDIBOBAP@?$AA?2?$AAC?$AAu?$AAs?$AAt?$AAo?$AAm?$AAS?$AAD?$AAB@NNGAKEGL@
		pop	ecx
		rep movsd
		movsw
		jnb	short loc_A2126D
		mov	eax, 0C0000023h
		jmp	short loc_A212CE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2126D:				; CODE XREF: SdbpGetPathCustomSdb(x,x,x,x)+31j
		xor	eax, eax
		mov	word ptr [ebp+var_224],	ax
		mov	[ebx], ax
		test	edx, edx
		jnz	short loc_A21282
		mov	edx, offset ??_C@_11LOCGONAA@@NNGAKEGL@

loc_A21282:				; CODE XREF: SdbpGetPathCustomSdb(x,x,x,x)+48j
		push	104h
		lea	eax, [ebp+var_224]
		push	eax
		lea	ecx, [ebp+var_1C]
		call	_AslPathCombine@16 ; AslPathCombine(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A212B8
		push	esi
		push	offset ??_C@_0BL@IPDIPDIN@AslPathCombine?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	44Ah
		push	offset ??_C@_0BF@OKGMJLIO@SdbpGetPathCustomSdb@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A212CC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A212B8:				; CODE XREF: SdbpGetPathCustomSdb(x,x,x,x)+67j
		push	0
		lea	eax, [ebp+var_224]
		push	eax
		push	[ebp+arg_4]
		push	ebx
		call	_SdbpGetPathAppPatch@16	; SdbpGetPathAppPatch(x,x,x,x)
		mov	esi, eax

loc_A212CC:				; CODE XREF: SdbpGetPathCustomSdb(x,x,x,x)+83j
		mov	eax, esi

loc_A212CE:				; CODE XREF: SdbpGetPathCustomSdb(x,x,x,x)+38j
		mov	ecx, [ebp+var_4]
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	10h
_SdbpGetPathCustomSdb@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetPathSystem(x, x, x, x)
_SdbpGetPathSystem@16 proc near		; DATA XREF: .text:00404F28o

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		and	[ebp+var_8], 0
		lea	edx, [ebp+var_4]
		and	[ebp+var_4], 0
		lea	ecx, [ebp+var_8]
		push	esi
		push	[ebp+arg_C]
		call	_SdbpGetProcessHostGuestArchitectures@12 ; SdbpGetProcessHostGuestArchitectures(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A21310
		push	esi
		push	offset ??_C@_0DB@LPCMCBIC@SdbpGetProcessHostGuestArchitec@NNGAKEGL@
		push	410h
		jmp	short loc_A21336
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21310:				; CODE XREF: SdbpGetPathSystem(x,x,x,x)+22j
		mov	edx, [ebp+arg_4]
		lea	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		push	eax
		push	[ebp+var_8]
		push	[ebp+arg_8]
		call	_AslEnvGetSystem32DirPathBuf@20	; AslEnvGetSystem32DirPathBuf(x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A21345
		push	esi
		push	(offset	loc_8C3DDD+1)
		push	416h

loc_A21336:				; CODE XREF: SdbpGetPathSystem(x,x,x,x)+2Fj
		push	offset ??_C@_0BC@FMFCMILN@SdbpGetPathSystem@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A21345:				; CODE XREF: SdbpGetPathSystem(x,x,x,x)+4Aj
		mov	eax, esi
		pop	esi
		leave
		retn	10h
_SdbpGetPathSystem@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetProcessHostGuestArchitectures(x, x, x)
_SdbpGetProcessHostGuestArchitectures@12 proc near
					; CODE XREF: SdbpGetPathAppPatchPreRS3(x,x,x,x)+73p
					; SdbpGetPathCustomSdbPreRS3(x,x,x,x)+84p ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	eax, 0FFFFh
		sub	esp, 0Ch
		mov	edi, edx
		mov	[ebp+var_4], eax
		mov	ebx, ecx
		mov	[ebp+var_8], eax
		lea	edx, [ebp+var_4]
		lea	ecx, [ebp+var_8]
		call	AslEnvGetProcessWowInfo
		mov	esi, eax
		test	esi, esi
		jns	short loc_A21395
		push	esi
		push	offset ??_C@_0CE@JCOOOONA@AslEnvGetProcessWowInfo?5failed?5@NNGAKEGL@
		push	369h
		push	offset ??_C@_0CF@OLEHGKON@SdbpGetProcessHostGuestArchitec@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A213C1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21395:				; CODE XREF: SdbpGetProcessHostGuestArchitectures(x,x,x)+2Bj
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_A213B1
		mov	cx, [eax]
		call	AslImageFileToArchitecture
		movzx	ecx, ax
		mov	eax, 0FFFFh
		cmp	cx, ax
		jnz	short loc_A213B5

loc_A213B1:				; CODE XREF: SdbpGetProcessHostGuestArchitectures(x,x,x)+4Ej
		movzx	ecx, word ptr [ebp+var_4]

loc_A213B5:				; CODE XREF: SdbpGetProcessHostGuestArchitectures(x,x,x)+63j
		mov	ax, word ptr [ebp+var_8]
		xor	esi, esi
		mov	[ebx], ax
		mov	[edi], cx

loc_A213C1:				; CODE XREF: SdbpGetProcessHostGuestArchitectures(x,x,x)+47j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	4
_SdbpGetProcessHostGuestArchitectures@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpGetSystemSdbFilePath(x,	x, x, x, x, x)
_SdbpGetSystemSdbFilePath@24 proc near	; CODE XREF: SdbGetPathCustomSdb(x,x,x,x)+66p
					; SdbResolveDatabaseEx(x,x,x,x,x,x)+C7p

arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, ecx
		xor	eax, eax
		push	edi
		mov	edi, [ebp+arg_0]
		mov	[esi], ax
		test	edi, edi
		jz	loc_A21492
		cmp	edi, 0Ah
		jge	loc_A21492
		inc	eax
		mov	ecx, offset dword_404EA0

loc_A213F2:				; CODE XREF: SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+33j
		cmp	[ecx], edi
		jz	short loc_A21401
		inc	eax
		add	ecx, 10h
		cmp	eax, 0Ah
		jb	short loc_A213F2
		jmp	short loc_A2140B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21401:				; CODE XREF: SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+2Aj
		shl	eax, 4
		add	eax, offset dword_404E90
		jnz	short loc_A2142C

loc_A2140B:				; CODE XREF: SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+35j
		push	edi
		push	(offset	loc_8C3EE6+6)
		push	501h
		push	offset ??_C@_0BJ@HFHDPNEL@SdbpGetSystemSdbFilePath@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		mov	esi, 0C0000225h
		jmp	short loc_A21497
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2142C:				; CODE XREF: SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+3Fj
		mov	edx, [eax+8]
		test	edx, edx
		jnz	short loc_A21453
		push	offset ??_C@_0DC@PFAPBPOE@SdbFileDetails?5missing?5function@NNGAKEGL@
		push	50Fh
		push	offset ??_C@_0BJ@HFHDPNEL@SdbpGetSystemSdbFilePath@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		mov	esi, 0C00000E5h
		jmp	short loc_A21497
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21453:				; CODE XREF: SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+67j
		mov	ecx, [ebp+arg_8]
		test	ecx, ecx
		jnz	short loc_A2145D
		mov	ecx, [eax+4]

loc_A2145D:				; CODE XREF: SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+8Ej
		push	[ebp+arg_C]
		push	ecx
		push	104h
		push	esi
		call	edx
		mov	esi, eax
		test	esi, esi
		jns	short loc_A2148E
		push	esi
		push	0
		push	edi
		push	offset ??_C@_0DO@KLLBMCFK@GetPathFunction?5?$CIfor?5SdbFileTyp@NNGAKEGL@
		push	519h
		push	offset ??_C@_0BJ@HFHDPNEL@SdbpGetSystemSdbFilePath@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 1Ch
		jmp	short loc_A21497
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2148E:				; CODE XREF: SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+A3j
		xor	esi, esi
		jmp	short loc_A21497
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21492:				; CODE XREF: SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+13j
					; SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+1Cj
		mov	esi, 0C00000F1h

loc_A21497:				; CODE XREF: SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+60j
					; SdbpGetSystemSdbFilePath(x,x,x,x,x,x)+87j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebp
		retn	10h
_SdbpGetSystemSdbFilePath@24 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall SdbpRemoveSDBLookupEntry(x,	x)
_SdbpRemoveSDBLookupEntry@8 proc near	; CODE XREF: SdbReleaseDatabase+8Fp
		mov	edi, edi
		push	esi
		mov	esi, [edx+4]
		cmp	esi, edx
		jnz	short loc_A214B2
		and	dword ptr [ecx+1A4h], 0
		jmp	short loc_A214D1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A214B2:				; CODE XREF: SdbpRemoveSDBLookupEntry(x,x)+8j
		cmp	[ecx+1A4h], edx
		jnz	short loc_A214C5
		mov	eax, [edx]
		mov	[ecx+1A4h], eax
		mov	esi, [edx+4]

loc_A214C5:				; CODE XREF: SdbpRemoveSDBLookupEntry(x,x)+19j
		mov	eax, [edx]
		mov	[esi], eax
		mov	ecx, [edx]
		mov	eax, [edx+4]
		mov	[ecx+4], eax

loc_A214D1:				; CODE XREF: SdbpRemoveSDBLookupEntry(x,x)+11j
		push	74705041h
		push	edx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		pop	esi
		retn
_SdbpRemoveSDBLookupEntry@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpOpenCompressedDatabase(x, x, x)
_SdbpOpenCompressedDatabase@12 proc near ; CODE	XREF: SdbOpenDatabaseEx(x,x,x,x)+146p

var_24		= dword	ptr -24h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		and	[ebp+var_4], 0
		mov	eax, ecx
		and	[ebp+var_8], 0
		push	ebx
		xor	ebx, ebx
		mov	[ebp+var_10], eax
		mov	eax, [eax]
		push	esi
		push	edi
		mov	[ebp+var_C], eax
		cmp	_g_ExpandCallback, ebx
		jnz	short loc_A21526
		push	(offset	loc_8C4161+3)
		push	93h

loc_A2150F:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+58j
					; SdbpOpenCompressedDatabase(x,x,x)+78j ...
		push	offset ??_C@_0BL@JHLABFDA@SdbpOpenCompressedDatabase@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		mov	esi, [ebp+var_4]
		add	esp, 10h
		jmp	loc_A21634
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21526:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+25j
		cmp	dword ptr [eax+0Ch], 14h
		jnb	short loc_A21538
		push	offset ??_C@_0BP@FEFPKLNB@SDB?5file?5too?5small?5to?5be?5valid@NNGAKEGL@
		push	98h
		jmp	short loc_A2150F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21538:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+4Cj
		mov	esi, [eax+4]
		lea	edi, [ebp+var_24]
		push	5
		pop	ecx
		rep movsd
		cmp	[ebp+var_1C], 6662647Ah
		jz	short loc_A21558
		push	(offset	loc_8C414A+4)
		push	9Fh
		jmp	short loc_A2150F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21558:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+6Cj
		mov	eax, [ebp+var_18]
		cmp	eax, _g_ExpectedAlgorithm
		jz	short loc_A2156F
		push	offset ??_C@_0DN@KMAJDPML@SDB?5compression?5algorithm?5does?5@NNGAKEGL@
		push	0A4h
		jmp	short loc_A2150F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2156F:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+83j
		mov	edx, [ebp+var_14]
		mov	[ebp+var_8], edx
		cmp	edx, 7FFFFFFFh
		jbe	short loc_A2158E
		cmp	edx, 2Ah
		jnb	short loc_A2158E
		push	offset ??_C@_0DG@DAKFPAHP@Expanded?5SDB?5file?5too?5small?5or?5@NNGAKEGL@
		push	0ADh
		jmp	short loc_A2150F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2158E:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+9Dj
					; SdbpOpenCompressedDatabase(x,x,x)+A2j
		push	ecx
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A215A9
		push	offset ??_C@_0EO@JMMLLMHM@SdbpOpenCompressedDatabase?5fail@NNGAKEGL@
		push	0B7h
		jmp	loc_A2150F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A215A9:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+BAj
		mov	eax, [ebp+var_C]
		mov	ecx, [eax+4]
		mov	eax, [eax+0Ch]
		add	ecx, 14h
		sub	eax, 14h
		push	eax
		push	ecx
		lea	eax, [ebp+var_8]
		push	eax
		push	esi
		call	_g_ExpandCallback
		test	eax, eax
		jnz	short loc_A215E4
		push	(offset	loc_8C4205+1)
		push	0C1h
		push	offset ??_C@_0BL@JHLABFDA@SdbpOpenCompressedDatabase@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A21605
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A215E4:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+E9j
		mov	edx, [ebp+var_8]
		push	ecx
		mov	ecx, esi
		call	SdbpOpenDatabaseInMemory
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_A21605
		or	dword ptr [ebx+10h], 0Ch
		xor	esi, esi
		and	[ebp+var_8], esi
		mov	[ebp+var_4], 1

loc_A21605:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+104j
					; SdbpOpenCompressedDatabase(x,x,x)+115j
		test	esi, esi
		jz	short loc_A21620
		push	74705041h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		and	[ebp+var_8], 0
		test	ebx, ebx
		jz	short loc_A21620
		and	dword ptr [ebx+4], 0

loc_A21620:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+129j
					; SdbpOpenCompressedDatabase(x,x,x)+13Cj
		mov	esi, [ebp+var_4]
		test	esi, esi
		jnz	short loc_A21634
		test	ebx, ebx
		jz	short loc_A21634
		mov	ecx, ebx
		call	SdbCloseDatabaseRead
		xor	ebx, ebx

loc_A21634:				; CODE XREF: SdbpOpenCompressedDatabase(x,x,x)+43j
					; SdbpOpenCompressedDatabase(x,x,x)+147j ...
		mov	edi, [ebp+var_10]
		mov	ecx, [edi]
		call	SdbCloseDatabaseRead
		mov	[edi], ebx
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
_SdbpOpenCompressedDatabase@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckAllAttributes(x, x, x, x, x)
_SdbpCheckAllAttributes@20 proc	near	; CODE XREF: SdbpCheckMatchingFiles(x,x,x,x,x,x,x)+A3p
					; SdbpCheckMatchingFiles(x,x,x,x,x,x,x)+1ADp ...

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 30h
		push	ebx
		mov	ebx, [ebp+arg_8]
		mov	eax, ecx
		push	esi
		push	edi
		xor	ecx, ecx
		mov	[ebp+var_20], edx
		xor	edi, edi
		mov	[ebp+var_24], eax
		inc	edi
		mov	[ebp+var_10], ecx
		mov	[ebp+var_30], ecx
		mov	[ebp+var_2C], ecx
		mov	[eax], ecx
		mov	[ebp+var_14], edi
		test	ebx, ebx
		jz	loc_A21857
		cmp	[ebx+30h], ecx
		jz	short loc_A21689
		xor	eax, eax
		cmp	[ebx+18h], ecx
		setnz	al
		jmp	short loc_A21690
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21689:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+34j
		cmp	[ebx+8], ecx
		jnz	short loc_A21698
		mov	eax, ecx

loc_A21690:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+3Ej
		test	eax, eax
		jz	loc_A21857

loc_A21698:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+43j
		push	ecx
		mov	edx, 348h
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	esi, eax
		mov	[ebp+var_1C], esi
		test	esi, esi
		jnz	short loc_A216B6
		mov	esi, 0C0000017h
		jmp	loc_A21859
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A216B6:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+61j
		mov	eax, offset unk_6B6924
		xor	ecx, ecx
		mov	[ebp+var_8], eax
		mov	[ebp+var_18], ecx

loc_A216C3:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+1A4j
		movzx	eax, word ptr [eax-4]
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		push	eax
		mov	[ebp+var_C], eax
		call	_SdbFindFirstTag@12 ; SdbFindFirstTag(x,x,x)
		test	eax, eax
		jz	loc_A217D5
		mov	ecx, [ebp+var_C]
		xor	edx, edx
		and	ecx, 0F000h
		mov	[ebp+arg_8], edx
		mov	edi, edx
		mov	[ebp+var_4], edi
		cmp	ecx, 4000h
		jz	short loc_A2174C
		cmp	ecx, 5000h
		jz	short loc_A21733
		cmp	ecx, 6000h
		jnz	short loc_A21766
		mov	ecx, [ebp+arg_0]
		mov	edx, eax
		call	SdbGetStringTagPtr
		mov	edx, eax
		mov	[ebp+arg_8], eax
		lea	eax, [edx+2]

loc_A2171B:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+DBj
		mov	cx, [edx]
		add	edx, 2
		cmp	cx, di
		jnz	short loc_A2171B
		sub	edx, eax
		sar	edx, 1
		lea	edi, ds:2[edx*2]
		jmp	short loc_A21763
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21733:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+B6j
		mov	ecx, [ebp+arg_0]
		push	edx
		push	edx
		mov	edx, eax
		call	SdbReadQWORDTag
		mov	[ebp+var_30], eax
		lea	eax, [ebp+var_30]
		mov	[ebp+var_2C], edx
		push	8
		jmp	short loc_A2175F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2174C:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+AEj
		mov	ecx, [ebp+arg_0]
		push	edx
		mov	edx, eax
		call	SdbReadDWORDTag
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_10]
		push	4

loc_A2175F:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+101j
		pop	edi
		mov	[ebp+arg_8], eax

loc_A21763:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+E8j
		mov	[ebp+var_4], edi

loc_A21766:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+BEj
		mov	ecx, [ebp+var_8]
		xor	eax, eax
		inc	eax
		xor	edx, edx
		mov	ecx, [ecx]
		call	__allshl
		push	edx
		push	eax
		mov	edx, ebx
		mov	ecx, esi
		call	_AslFileAllocAndGetAttributes@16 ; AslFileAllocAndGetAttributes(x,x,x,x)
		mov	esi, eax
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		test	esi, esi
		js	loc_A2183A
		mov	esi, [ebp+var_1C]
		imul	eax, 18h
		add	eax, esi
		test	byte ptr [eax+10h], 1
		jz	loc_A21834
		mov	edx, [ebp+var_C]
		lea	ecx, [ebp+var_14]
		push	eax
		push	edi
		push	[ebp+arg_8]
		call	_SdbpCheckAttribute@20 ; SdbpCheckAttribute(x,x,x,x,x)
		test	eax, eax
		jz	short loc_A21813
		mov	eax, [ebp+var_20]
		mov	edi, [ebp+var_14]
		mov	eax, [eax+3F0h]
		test	eax, eax
		jz	short loc_A217D1
		push	edi
		push	[ebp+var_4]
		push	[ebp+arg_8]
		push	[ebp+var_C]
		call	eax

loc_A217D1:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+17Aj
		test	edi, edi
		jz	short loc_A217F3

loc_A217D5:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+8Fj
		mov	ecx, [ebp+var_18]
		mov	eax, [ebp+var_8]
		add	ecx, 8
		add	eax, 8
		mov	[ebp+var_18], ecx
		mov	[ebp+var_8], eax
		cmp	ecx, 130h
		jb	loc_A216C3

loc_A217F3:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+18Aj
		xor	eax, eax
		mov	esi, eax
		mov	eax, [ebp+var_24]
		mov	[eax], edi

loc_A217FC:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+1E9j
					; SdbpCheckAllAttributes(x,x,x,x,x)+1EFj ...
		mov	edi, [ebp+var_1C]
		mov	ecx, edi
		call	_AslFileFreeAttributes@4 ; AslFileFreeAttributes(x)
		push	74705041h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		jmp	short loc_A21859
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21813:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+16Aj
		mov	esi, 0C00000E5h
		push	esi
		push	offset ??_C@_0BP@NLPCOOD@SdbpCheckAttribute?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	359h
		push	offset ??_C@_0BH@LGBLGPBK@SdbpCheckAllAttributes@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A217FC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21834:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+152j
		xor	eax, eax
		mov	esi, eax
		jmp	short loc_A217FC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2183A:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+140j
		push	esi
		push	eax
		push	offset ??_C@_0CA@NOHMNGME@Failed?5to?5get?5attribute?5?$CFd?5?$FL?$CFx?$FN@NNGAKEGL@
		push	342h
		push	offset ??_C@_0BH@LGBLGPBK@SdbpCheckAllAttributes@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 18h
		jmp	short loc_A217FC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21857:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+2Bj
					; SdbpCheckAllAttributes(x,x,x,x,x)+49j
		mov	esi, ecx

loc_A21859:				; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+68j
					; SdbpCheckAllAttributes(x,x,x,x,x)+1C8j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
_SdbpCheckAllAttributes@20 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckAttribute(x, x, x,	x, x)
_SdbpCheckAttribute@20 proc near	; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+163p

var_6		= word ptr -6
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		and	esp, 0FFFFFFF8h
		sub	esp, 0Ch
		push	ebx
		push	esi
		xor	esi, esi
		mov	[esp+14h+var_4], ecx
		push	edi
		mov	ax, dx
		mov	[ecx], esi
		xor	edi, edi
		movzx	ebx, ax
		mov	ecx, 5006h
		mov	[esp+18h+var_6], ax
		inc	edi
		cmp	ebx, ecx
		ja	loc_A21940
		jz	loc_A21AC0
		cmp	ebx, 401Eh
		jz	short loc_A2191E
		cmp	ebx, 4033h
		jz	short loc_A218F7
		lea	eax, [ebx-5002h]
		cmp	eax, edi
		ja	loc_A21A21
		cmp	[ebp+arg_4], 8
		jnb	short loc_A218DC
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	238h

loc_A218C7:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+1F1j
					; SdbpCheckAttribute(x,x,x,x,x)+219j ...
		push	offset ??_C@_0BD@EDJAJPBP@SdbpCheckAttribute@NNGAKEGL@
		push	edi

loc_A218CD:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+19Fj
		call	AslLogCallPrintf
		add	esp, 10h
		mov	edi, esi
		jmp	loc_A21AF3
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A218DC:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+59j
		mov	eax, [ebp+arg_8]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8]
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		call	_SdbpCheckVersion@16 ; SdbpCheckVersion(x,x,x,x)
		jmp	loc_A21AEB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A218F7:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+45j
		cmp	[ebp+arg_4], 4
		jnb	short loc_A2190C
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	261h
		jmp	loc_A219FA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2190C:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+99j
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		mov	eax, [ebp+arg_8]
		cmp	[eax+8], ecx

loc_A21917:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+DCj
		sbb	esi, esi
		jmp	loc_A21ABD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2191E:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+3Dj
		cmp	[ebp+arg_4], 4
		jnb	short loc_A21933
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	26Eh
		jmp	loc_A219FA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21933:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+C0j
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		mov	eax, [ebp+arg_8]
		cmp	ecx, [eax+8]
		jmp	short loc_A21917
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21940:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+2Bj
		cmp	ebx, 500Dh
		jz	loc_A21AC0
		cmp	ebx, 5011h
		jbe	loc_A21A21
		cmp	ebx, 5013h
		jbe	loc_A219EA
		cmp	ebx, 6043h
		jbe	loc_A21A21
		mov	ecx, 6047h
		cmp	ax, cx
		ja	loc_A21A21
		call	_Feature_CompatBuildInVb__private_IsEnabledDeviceUsage@0 ; Feature_CompatBuildInVb__private_IsEnabledDeviceUsage()
		test	eax, eax
		jz	loc_A21A21
		mov	ax, [esp+18h+var_6]
		mov	ecx, 6046h
		cmp	ax, cx
		jz	short loc_A219C5
		inc	ecx
		cmp	ax, cx
		jz	short loc_A219C5
		cmp	[ebp+arg_4], 2
		jnb	short loc_A219B2
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	28Fh
		jmp	short loc_A219FA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A219B2:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+142j
		mov	edx, [ebp+arg_8]
		mov	ecx, [ebp+arg_0]
		mov	edx, [edx+8]
		call	_SdbpCheckUptoStringVersion@8 ;	SdbpCheckUptoStringVersion(x,x)
		jmp	loc_A21AEB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A219C5:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+136j
					; SdbpCheckAttribute(x,x,x,x,x)+13Cj
		cmp	[ebp+arg_4], 2
		jnb	short loc_A219D7
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	281h
		jmp	short loc_A219FA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A219D7:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+167j
		mov	edx, [ebp+arg_8]
		mov	ecx, [ebp+arg_0]
		mov	edx, [edx+8]
		call	_SdbpCheckFromStringVersion@8 ;	SdbpCheckFromStringVersion(x,x)
		jmp	loc_A21AEB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A219EA:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+FCj
		cmp	[ebp+arg_4], 8
		jnb	short loc_A21A06
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	246h

loc_A219FA:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+A5j
					; SdbpCheckAttribute(x,x,x,x,x)+CCj ...
		push	offset ??_C@_0BD@EDJAJPBP@SdbpCheckAttribute@NNGAKEGL@
		push	1
		jmp	loc_A218CD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21A06:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+18Cj
		mov	eax, [ebp+arg_8]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8]
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+4]
		push	dword ptr [eax]
		call	_SdbpCheckFromVersion@16 ; SdbpCheckFromVersion(x,x,x,x)
		jmp	loc_A21AEB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21A21:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+4Fj
					; SdbpCheckAttribute(x,x,x,x,x)+F0j ...
		and	ebx, 0F000h
		cmp	ebx, 4000h
		jz	short loc_A21A99
		cmp	ebx, 5000h
		jz	short loc_A21A6B
		cmp	ebx, 6000h
		jnz	loc_A21AED
		cmp	[ebp+arg_4], 2
		jnb	short loc_A21A58
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	2B6h
		jmp	loc_A218C7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21A58:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+1E5j
		mov	edx, [ebp+arg_8]
		mov	ecx, [ebp+arg_0]
		mov	edx, [edx+8]
		call	AslStringPatternMatchW
		jmp	loc_A21AEB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21A6B:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+1D3j
		cmp	[ebp+arg_4], 8
		jnb	short loc_A21A80
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	2C4h
		jmp	loc_A218C7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21A80:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+20Dj
		mov	ecx, [ebp+arg_0]
		mov	edx, [ebp+arg_8]
		mov	eax, [ecx]
		cmp	eax, [edx+8]
		jnz	short loc_A21AED
		mov	eax, [ecx+4]
		cmp	eax, [edx+0Ch]
		jnz	short loc_A21AED
		mov	esi, edi
		jmp	short loc_A21AED
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21A99:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+1CBj
		cmp	[ebp+arg_4], 4
		jnb	short loc_A21AAE
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	2A6h
		jmp	loc_A218C7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21AAE:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+23Bj
		mov	eax, [ebp+arg_0]
		mov	esi, [eax]
		mov	eax, [ebp+arg_8]
		sub	esi, [eax+8]
		neg	esi
		sbb	esi, esi

loc_A21ABD:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+B7j
		inc	esi
		jmp	short loc_A21AED
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21AC0:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+31j
					; SdbpCheckAttribute(x,x,x,x,x)+E4j
		cmp	[ebp+arg_4], 8
		jnb	short loc_A21AD5
		push	offset ??_C@_0BN@MAJDMDHG@Attribute?5size?5doesn?8t?5match@NNGAKEGL@ ; "Attribute size doesn't match"
		push	254h
		jmp	loc_A219FA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21AD5:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+262j
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+arg_0]
		push	dword ptr [eax+0Ch]
		push	dword ptr [eax+8]
		push	dword ptr [ecx+4]
		push	dword ptr [ecx]
		call	_SdbpCheckUptoVersion@16 ; SdbpCheckUptoVersion(x,x,x,x)

loc_A21AEB:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+90j
					; SdbpCheckAttribute(x,x,x,x,x)+15Ej ...
		mov	esi, eax

loc_A21AED:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+1DBj
					; SdbpCheckAttribute(x,x,x,x,x)+229j ...
		mov	eax, [esp+18h+var_4]
		mov	[eax], esi

loc_A21AF3:				; CODE XREF: SdbpCheckAttribute(x,x,x,x,x)+75j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
_SdbpCheckAttribute@20 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckFromVersion(x, x, x, x)
_SdbpCheckFromVersion@16 proc near	; CODE XREF: SdbpCheckApplicationTypeAttributes(x,x,x,x)+162p
					; SdbpMatchOsVersion+8A5CFp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		xor	esi, esi
		push	30h
		inc	esi
		pop	edi

loc_A21B0C:				; CODE XREF: SdbpCheckFromVersion(x,x,x,x)+40j
		mov	eax, [ebp+arg_0]
		mov	ecx, edi
		mov	edx, [ebp+arg_4]
		call	__aullshr
		mov	edx, [ebp+arg_C]
		mov	ecx, edi
		movzx	ebx, ax
		mov	eax, [ebp+arg_8]
		call	__aullshr
		movzx	eax, ax
		cmp	bx, ax
		jz	short loc_A21B3B
		mov	ecx, 0FFFFh
		cmp	bx, cx
		jnz	short loc_A21B42

loc_A21B3B:				; CODE XREF: SdbpCheckFromVersion(x,x,x,x)+31j
		sub	edi, 10h
		jns	short loc_A21B0C
		jmp	short loc_A21B49
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21B42:				; CODE XREF: SdbpCheckFromVersion(x,x,x,x)+3Bj
		cmp	bx, ax
		sbb	esi, esi
		neg	esi

loc_A21B49:				; CODE XREF: SdbpCheckFromVersion(x,x,x,x)+42j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	10h
_SdbpCheckFromVersion@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckUptoVersion(x, x, x, x)
_SdbpCheckUptoVersion@16 proc near	; CODE XREF: SdbpCheckApplicationTypeAttributes(x,x,x,x)+130p
					; SdbpMatchOsVersion+8A600p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		xor	esi, esi
		push	30h
		inc	esi
		pop	edi

loc_A21B60:				; CODE XREF: SdbpCheckUptoVersion(x,x,x,x)+40j
		mov	eax, [ebp+arg_0]
		mov	ecx, edi
		mov	edx, [ebp+arg_4]
		call	__aullshr
		mov	edx, [ebp+arg_C]
		mov	ecx, edi
		movzx	ebx, ax
		mov	eax, [ebp+arg_8]
		call	__aullshr
		movzx	eax, ax
		cmp	bx, ax
		jz	short loc_A21B8F
		mov	ecx, 0FFFFh
		cmp	bx, cx
		jnz	short loc_A21B96

loc_A21B8F:				; CODE XREF: SdbpCheckUptoVersion(x,x,x,x)+31j
		sub	edi, 10h
		jns	short loc_A21B60
		jmp	short loc_A21B9D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21B96:				; CODE XREF: SdbpCheckUptoVersion(x,x,x,x)+3Bj
		cmp	ax, bx
		sbb	esi, esi
		neg	esi

loc_A21B9D:				; CODE XREF: SdbpCheckUptoVersion(x,x,x,x)+42j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	10h
_SdbpCheckUptoVersion@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall SdbpCheckVersion(x,	x, x, x)
_SdbpCheckVersion@16 proc near		; CODE XREF: SdbpCheckApplicationTypeAttributes(x,x,x,x)+194p
					; SdbpMatchOsVersion+8A5A4p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		push	30h
		pop	esi

loc_A21BB0:				; CODE XREF: SdbpCheckVersion(x,x,x,x)+39j
		mov	eax, [ebp+arg_0]
		mov	ecx, esi
		mov	edx, [ebp+arg_4]
		call	__aullshr
		mov	edx, [ebp+arg_C]
		mov	ecx, esi
		movzx	edi, ax
		mov	eax, [ebp+arg_8]
		call	__aullshr
		cmp	di, ax
		jz	short loc_A21BDC
		mov	eax, 0FFFFh
		cmp	di, ax
		jnz	short loc_A21BEA

loc_A21BDC:				; CODE XREF: SdbpCheckVersion(x,x,x,x)+2Aj
		sub	esi, 10h
		jns	short loc_A21BB0
		xor	eax, eax
		inc	eax

loc_A21BE4:				; CODE XREF: SdbpCheckVersion(x,x,x,x)+46j
		pop	edi
		pop	esi
		pop	ebp
		retn	10h
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21BEA:				; CODE XREF: SdbpCheckVersion(x,x,x,x)+34j
		xor	eax, eax
		jmp	short loc_A21BE4
_SdbpCheckVersion@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall SdbFindNextStringIndexedTag(x, x)
_SdbFindNextStringIndexedTag@8 proc near ; CODE	XREF: SdbGetDatabaseMatchEx+AFC55p
					; SdbpSearchDB+AF7C9p ...
		mov	edi, edi
		push	ecx
		push	esi
		mov	esi, edx
		push	edi
		push	esi
		mov	edi, ecx
		mov	edx, [esi]
		call	SdbpGetNextIndexedRecord
		test	eax, eax
		jz	short loc_A21C0D
		push	esi
		mov	edx, eax
		mov	ecx, edi
		call	SdbpFindMatchingName

loc_A21C0D:				; CODE XREF: SdbFindNextStringIndexedTag(x,x)+13j
		pop	edi
		pop	esi
		pop	ecx
		retn
_SdbFindNextStringIndexedTag@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslGuidToString_UStr(x, x)
_AslGuidToString_UStr@8	proc near	; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+6Ep
		mov	edi, edi
		push	ebx
		push	esi
		push	edi
		push	4Ch
		pop	eax
		mov	ebx, ecx
		mov	edi, edx
		push	4Eh
		pop	edx
		push	ecx
		mov	[ebx], ax
		mov	[ebx+2], dx
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A21C56
		push	offset ??_C@_0O@NALGGDJF@Out?5of?5memory@NNGAKEGL@
		push	0F1h
		push	(offset	loc_8C4836+4)
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		mov	edi, 0C0000017h
		jmp	loc_A21CD7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21C56:				; CODE XREF: AslGuidToString_UStr(x,x)+20j
		movzx	eax, byte ptr [edi+0Fh]
		push	eax
		movzx	eax, byte ptr [edi+0Eh]
		push	eax
		movzx	eax, byte ptr [edi+0Dh]
		push	eax
		movzx	eax, byte ptr [edi+0Ch]
		push	eax
		movzx	eax, byte ptr [edi+0Bh]
		push	eax
		movzx	eax, byte ptr [edi+0Ah]
		push	eax
		movzx	eax, byte ptr [edi+9]
		push	eax
		movzx	eax, byte ptr [edi+8]
		push	eax
		movzx	eax, word ptr [edi+6]
		push	eax
		movzx	eax, word ptr [edi+4]
		push	eax
		push	dword ptr [edi]	; char
		movzx	eax, word ptr [ebx+2]
		push	offset ??_C@_1HM@GHDLPNLE@?$AA?$HL?$AA?$CF?$AA0?$AA8?$AAl?$AAx?$AA?9?$AA?$CF?$AA0?$AA4?$AAh?$AAx?$AA?9?$AA?$CF?$AA0@NNGAKEGL@ ;	"{%08lx-%04hx-%04hx-%02hx%02hx-%02hx%02h"...
		shr	eax, 1
		push	eax		; int
		push	esi		; wchar_t *
		call	RtlStringCchPrintfW
		mov	edi, eax
		add	esp, 38h
		test	edi, edi
		jns	short loc_A21CC1
		push	edi
		push	offset ??_C@_0CA@FFNDHPE@RtlStringCchPrintfW?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	105h
		push	(offset	loc_8C4836+4)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A21CC8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21CC1:				; CODE XREF: AslGuidToString_UStr(x,x)+92j
		mov	[ebx+4], esi
		xor	esi, esi
		mov	edi, esi

loc_A21CC8:				; CODE XREF: AslGuidToString_UStr(x,x)+AEj
		test	esi, esi
		jz	short loc_A21CD7
		push	74705041h
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A21CD7:				; CODE XREF: AslGuidToString_UStr(x,x)+40j
					; AslGuidToString_UStr(x,x)+B9j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
_AslGuidToString_UStr@8	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslStringAnsiToUnicode(x, x)
_AslStringAnsiToUnicode@8 proc near	; CODE XREF: AslpFileGet16BitDescription(x,x)+69p
					; AslpFileGet16BitModuleName(x,x)+69p ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		push	edx
		lea	eax, [ebp+var_10]
		xor	esi, esi
		push	eax
		mov	ebx, ecx
		mov	[ebp+var_10], esi
		mov	[ebp+var_C], esi
		call	_RtlInitString@8 ; RtlInitString(x,x)
		lea	eax, [ebp+var_10]
		push	eax
		call	_RtlxAnsiStringToUnicodeSize@4 ; RtlxAnsiStringToUnicodeSize(x)
		mov	edi, eax
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], esi
		mov	[ebx], esi
		cmp	edi, 0FFFFh
		jbe	short loc_A21D38
		push	edi
		push	offset ??_C@_0CJ@FKBOKAKO@Ansi?5string?5is?5too?5long?5to?5conv@NNGAKEGL@
		mov	esi, 0C000000Dh
		push	188h

loc_A21D27:				; CODE XREF: AslStringAnsiToUnicode(x,x)+B3j
		push	(offset	loc_8C47ED+5)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A21D9D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21D38:				; CODE XREF: AslStringAnsiToUnicode(x,x)+38j
		push	ecx
		mov	edx, edi
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	[ebp+var_4], eax
		test	eax, eax
		jnz	short loc_A21D67
		push	offset ??_C@_0O@NALGGDJF@Out?5of?5memory@NNGAKEGL@
		push	18Fh
		push	(offset	loc_8C47ED+5)
		push	1
		mov	esi, 0C0000017h
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A21D9D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21D67:				; CODE XREF: AslStringAnsiToUnicode(x,x)+68j
		xor	eax, eax
		mov	word ptr [ebp+var_8+2],	di
		mov	word ptr [ebp+var_8], ax
		lea	eax, [ebp+var_10]
		push	esi
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		call	RtlAnsiStringToUnicodeString
		mov	esi, eax
		test	esi, esi
		jns	short loc_A21D92
		push	esi
		push	offset ??_C@_0CJ@JMPLFPEH@RtlAnsiStringToUnicodeString?5fa@NNGAKEGL@
		push	198h
		jmp	short loc_A21D27
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21D92:				; CODE XREF: AslStringAnsiToUnicode(x,x)+A6j
		mov	eax, [ebp+var_4]
		and	[ebp+var_4], 0
		xor	esi, esi
		mov	[ebx], eax

loc_A21D9D:				; CODE XREF: AslStringAnsiToUnicode(x,x)+59j
					; AslStringAnsiToUnicode(x,x)+88j
		cmp	[ebp+var_4], 0
		jz	short loc_A21DB0
		push	74705041h
		push	[ebp+var_4]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A21DB0:				; CODE XREF: AslStringAnsiToUnicode(x,x)+C4j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
_AslStringAnsiToUnicode@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslStringHasWildcard(x)
_AslStringHasWildcard@4	proc near	; CODE XREF: AslpPathWildcardMakeLeaves(x)+136p
		mov	edi, edi
		push	esi
		xor	esi, esi
		test	ecx, ecx
		jz	short loc_A21DE8
		movzx	eax, word ptr [ecx]
		test	ax, ax
		jz	short loc_A21DE8
		mov	edx, eax

loc_A21DCA:				; CODE XREF: AslStringHasWildcard(x)+2Aj
		cmp	dx, 2Ah
		jz	short loc_A21DE5
		cmp	dx, 3Fh
		jz	short loc_A21DE5
		add	ecx, 2
		movzx	eax, word ptr [ecx]
		mov	edx, eax
		test	ax, ax
		jnz	short loc_A21DCA
		jmp	short loc_A21DE8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21DE5:				; CODE XREF: AslStringHasWildcard(x)+17j
					; AslStringHasWildcard(x)+1Dj
		xor	esi, esi
		inc	esi

loc_A21DE8:				; CODE XREF: AslStringHasWildcard(x)+7j
					; AslStringHasWildcard(x)+Fj ...
		mov	eax, esi
		pop	esi
		retn
_AslStringHasWildcard@4	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslStringSearchA(x,	x, x, x)
_AslStringSearchA@16 proc near		; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+2AFp

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	edi
		xor	edi, edi
		mov	[ebp+var_8], ecx
		test	edx, edx
		jz	short loc_A21E5A
		push	esi
		mov	esi, [ebp+arg_4]
		cmp	esi, edx
		ja	short loc_A21E59
		push	ebx
		mov	ebx, edi

loc_A21E08:				; CODE XREF: AslStringSearchA(x,x,x,x)+63j
		mov	eax, edi
		mov	ecx, ebx
		mov	[ebp+var_4], eax
		test	esi, esi
		jz	short loc_A21E45

loc_A21E13:				; CODE XREF: AslStringSearchA(x,x,x,x)+57j
		cmp	ecx, edx
		jnb	short loc_A21E45
		mov	eax, [ebp+var_8]
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_A21E25
		inc	ecx
		cmp	ecx, edx
		jnb	short loc_A21E58

loc_A21E25:				; CODE XREF: AslStringSearchA(x,x,x,x)+32j
		mov	esi, [ebp+var_4]
		mov	edi, [ebp+arg_0]
		mov	al, [ecx+eax]
		push	0
		cmp	al, [esi+edi]
		mov	esi, [ebp+arg_4]
		mov	eax, [ebp+var_4]
		pop	edi
		jnz	short loc_A21E45
		inc	eax
		inc	ecx
		mov	[ebp+var_4], eax
		cmp	eax, esi
		jb	short loc_A21E13

loc_A21E45:				; CODE XREF: AslStringSearchA(x,x,x,x)+25j
					; AslStringSearchA(x,x,x,x)+29j ...
		cmp	eax, esi
		jz	short loc_A21E53
		inc	ebx
		lea	eax, [ebx+esi]
		cmp	eax, edx
		jbe	short loc_A21E08
		jmp	short loc_A21E58
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21E53:				; CODE XREF: AslStringSearchA(x,x,x,x)+5Bj
		mov	edi, [ebp+var_8]
		add	edi, ebx

loc_A21E58:				; CODE XREF: AslStringSearchA(x,x,x,x)+37j
					; AslStringSearchA(x,x,x,x)+65j
		pop	ebx

loc_A21E59:				; CODE XREF: AslStringSearchA(x,x,x,x)+17j
		pop	esi

loc_A21E5A:				; CODE XREF: AslStringSearchA(x,x,x,x)+Fj
		mov	eax, edi
		pop	edi
		leave
		retn	8
_AslStringSearchA@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslStringSearchW(x,	x, x, x)
_AslStringSearchW@16 proc near		; CODE XREF: SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+29Ap

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		xor	esi, esi
		mov	[ebp+var_8], ecx
		test	edx, edx
		jz	short loc_A21ED2
		push	edi
		mov	edi, [ebp+arg_4]
		cmp	edi, edx
		ja	short loc_A21ED1
		push	ebx
		mov	ebx, esi

loc_A21E7D:				; CODE XREF: AslStringSearchW(x,x,x,x)+65j
		mov	eax, esi
		mov	ecx, ebx
		mov	[ebp+var_4], eax
		test	edi, edi
		jz	short loc_A21EBC

loc_A21E88:				; CODE XREF: AslStringSearchW(x,x,x,x)+59j
		cmp	ecx, edx
		jnb	short loc_A21EBC
		mov	eax, [ebp+var_8]
		cmp	[eax+ecx*2], si
		jnz	short loc_A21E9A
		inc	ecx
		cmp	ecx, edx
		jnb	short loc_A21ED0

loc_A21E9A:				; CODE XREF: AslStringSearchW(x,x,x,x)+32j
		mov	edi, [ebp+var_4]
		mov	esi, [ebp+arg_0]
		mov	ax, [eax+ecx*2]
		push	0
		cmp	ax, [esi+edi*2]
		mov	edi, [ebp+arg_4]
		mov	eax, [ebp+var_4]
		pop	esi
		jnz	short loc_A21EBC
		inc	eax
		inc	ecx
		mov	[ebp+var_4], eax
		cmp	eax, edi
		jb	short loc_A21E88

loc_A21EBC:				; CODE XREF: AslStringSearchW(x,x,x,x)+25j
					; AslStringSearchW(x,x,x,x)+29j ...
		cmp	eax, edi
		jz	short loc_A21ECA
		inc	ebx
		lea	eax, [ebx+edi]
		cmp	eax, edx
		jbe	short loc_A21E7D
		jmp	short loc_A21ED0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21ECA:				; CODE XREF: AslStringSearchW(x,x,x,x)+5Dj
		mov	ecx, [ebp+var_8]
		lea	esi, [ecx+ebx*2]

loc_A21ED0:				; CODE XREF: AslStringSearchW(x,x,x,x)+37j
					; AslStringSearchW(x,x,x,x)+67j
		pop	ebx

loc_A21ED1:				; CODE XREF: AslStringSearchW(x,x,x,x)+17j
		pop	edi

loc_A21ED2:				; CODE XREF: AslStringSearchW(x,x,x,x)+Fj
		mov	eax, esi
		pop	esi
		leave
		retn	8
_AslStringSearchW@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslStringXmlSanitize(x)
_AslStringXmlSanitize@4	proc near	; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+108p
					; AslpFileGetHeaderAttributesNE(x,x)+ADp ...
		mov	edx, ecx
		test	edx, edx
		jnz	short loc_A21EE5
		mov	eax, 0C000000Dh
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A21EE5:				; CODE XREF: AslStringXmlSanitize(x)+4j
		push	ebx
		xor	ebx, ebx
		cmp	[edx], bx
		jz	short loc_A21F33
		push	esi
		lea	esi, [ecx+2]

loc_A21EF1:				; CODE XREF: AslStringXmlSanitize(x)+21j
		mov	ax, [ecx]
		add	ecx, 2
		cmp	ax, bx
		jnz	short loc_A21EF1
		sub	ecx, esi
		mov	eax, ebx
		sar	ecx, 1
		jz	short loc_A21F32
		push	edi

loc_A21F05:				; CODE XREF: AslStringXmlSanitize(x)+56j
		movzx	edi, word ptr [edx+eax*2]
		mov	esi, ebx

loc_A21F0B:				; CODE XREF: AslStringXmlSanitize(x)+4Aj
		cmp	di, ds:word_42EAE8[esi]
		jb	short loc_A21F1D
		cmp	di, ds:word_42EAEA[esi]
		jbe	short loc_A21F2C

loc_A21F1D:				; CODE XREF: AslStringXmlSanitize(x)+39j
		add	esi, 4
		cmp	esi, 14h
		jb	short loc_A21F0B
		push	40h
		pop	esi
		mov	[edx+eax*2], si

loc_A21F2C:				; CODE XREF: AslStringXmlSanitize(x)+42j
		inc	eax
		cmp	eax, ecx
		jb	short loc_A21F05
		pop	edi

loc_A21F32:				; CODE XREF: AslStringXmlSanitize(x)+29j
		pop	esi

loc_A21F33:				; CODE XREF: AslStringXmlSanitize(x)+12j
		xor	eax, eax
		pop	ebx
		retn
_AslStringXmlSanitize@4	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslUnicodeStringFree(x)
_AslUnicodeStringFree@4	proc near	; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+2C2p
		mov	edi, edi
		push	esi
		mov	esi, ecx
		test	esi, esi
		jz	short loc_A21F70
		mov	ecx, [esi+4]
		test	ecx, ecx
		jz	short loc_A21F69
		movzx	eax, word ptr [esi+2]
		push	eax		; size_t
		push	42h		; int
		push	ecx		; void *
		call	_memset
		mov	eax, [esi+4]
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A21F69
		push	74705041h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A21F69:				; CODE XREF: AslUnicodeStringFree(x)+Ej
					; AslUnicodeStringFree(x)+25j
		and	dword ptr [esi], 0
		and	dword ptr [esi+4], 0

loc_A21F70:				; CODE XREF: AslUnicodeStringFree(x)+7j
		pop	esi
		retn
_AslUnicodeStringFree@4	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslComputeCrc32(x, x, x)
_AslComputeCrc32@12 proc near		; CODE XREF: AslpFileGetCrcChecksum(x,x)+3Ep
					; AslpFileGetCrcChecksum(x,x):loc_A24CF9p ...

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		xor	esi, esi
		not	ecx
		cmp	[ebp+arg_0], esi
		jbe	short loc_A21F9A

loc_A21F81:				; CODE XREF: AslComputeCrc32(x,x,x)+26j
		movzx	eax, byte ptr [esi+edx]
		xor	eax, ecx
		shr	ecx, 8
		movzx	eax, al
		xor	ecx, ds:_AslpCrc32Table[eax*4]
		inc	esi
		cmp	esi, [ebp+arg_0]
		jb	short loc_A21F81

loc_A21F9A:				; CODE XREF: AslComputeCrc32(x,x,x)+Dj
		not	ecx
		mov	eax, ecx
		pop	esi
		pop	ebp
		retn	4
_AslComputeCrc32@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslDoesDirectoryExistNtPath(x)
_AslDoesDirectoryExistNtPath@4 proc near
					; CODE XREF: SdbpCheckMatchingDir(x,x,x,x,x,x,x)+CDp

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	esi
		xor	esi, esi
		lea	eax, [ebp+var_C]
		push	ecx
		push	eax
		mov	[ebp+var_C], esi
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], esi
		mov	[ebp+var_14], esi
		mov	[ebp+var_10], esi
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		push	1
		lea	eax, [ebp+var_C]
		mov	[ebp+var_2C], 18h
		mov	[ebp+var_24], eax
		lea	eax, [ebp+var_14]
		push	3
		push	eax
		lea	eax, [ebp+var_2C]
		mov	[ebp+var_28], esi
		push	eax
		push	100080h
		lea	eax, [ebp+var_4]
		mov	[ebp+var_20], 240h
		push	eax
		mov	[ebp+var_1C], esi
		mov	[ebp+var_18], esi
		call	_ZwOpenFile@24	; ZwOpenFile(x,x,x,x,x,x)
		test	eax, eax
		js	short loc_A2200C
		push	[ebp+var_4]
		call	_ZwClose@4	; ZwClose(x)
		jmp	short loc_A2201A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2200C:				; CODE XREF: AslDoesDirectoryExistNtPath(x)+5Dj
		cmp	eax, 0C0000022h
		jz	short loc_A2201A
		cmp	eax, 0C0000043h
		jnz	short loc_A2201D

loc_A2201A:				; CODE XREF: AslDoesDirectoryExistNtPath(x)+67j
					; AslDoesDirectoryExistNtPath(x)+6Ej
		xor	esi, esi
		inc	esi

loc_A2201D:				; CODE XREF: AslDoesDirectoryExistNtPath(x)+75j
		mov	eax, esi
		pop	esi
		leave
		retn
_AslDoesDirectoryExistNtPath@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslDoesFileExistNtPath(x)
_AslDoesFileExistNtPath@4 proc near	; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+159p

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	esi
		xor	esi, esi
		lea	eax, [ebp+var_C]
		push	ecx
		push	eax
		mov	[ebp+var_C], esi
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], esi
		mov	[ebp+var_14], esi
		mov	[ebp+var_10], esi
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		push	esi
		lea	eax, [ebp+var_C]
		mov	[ebp+var_2C], 18h
		mov	[ebp+var_24], eax
		lea	eax, [ebp+var_14]
		push	1
		push	eax
		lea	eax, [ebp+var_2C]
		mov	[ebp+var_28], esi
		push	eax
		push	100080h
		lea	eax, [ebp+var_4]
		mov	[ebp+var_20], 240h
		push	eax
		mov	[ebp+var_1C], esi
		mov	[ebp+var_18], esi
		call	_ZwOpenFile@24	; ZwOpenFile(x,x,x,x,x,x)
		test	eax, eax
		jns	short loc_A22093
		cmp	eax, 0C0000043h
		jz	short loc_A2208E
		cmp	eax, 0C0000022h
		jnz	short loc_A2209E

loc_A2208E:				; CODE XREF: AslDoesFileExistNtPath(x)+63j
		xor	esi, esi
		inc	esi
		jmp	short loc_A2209E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22093:				; CODE XREF: AslDoesFileExistNtPath(x)+5Cj
		push	[ebp+var_4]
		xor	esi, esi
		inc	esi
		call	_ZwClose@4	; ZwClose(x)

loc_A2209E:				; CODE XREF: AslDoesFileExistNtPath(x)+6Aj
					; AslDoesFileExistNtPath(x)+6Fj
		mov	eax, esi
		pop	esi
		leave
		retn
_AslDoesFileExistNtPath@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslFileResourceNotFound(x)
_AslFileResourceNotFound@4 proc	near	; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+18Cp
					; AslpFileGetVersionAttributes(x,x)+2Cp ...
		cmp	ecx, 0C0000089h
		jz	short loc_A220BE
		cmp	ecx, 0C000008Ah
		jz	short loc_A220BE
		cmp	ecx, 0C000008Bh
		jz	short loc_A220BE
		xor	eax, eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A220BE:				; CODE XREF: AslFileResourceNotFound(x)+6j
					; AslFileResourceNotFound(x)+Ej ...
		xor	eax, eax
		inc	eax
		retn
_AslFileResourceNotFound@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslFree(x, x)
_AslFree@8	proc near		; CODE XREF: SdbpCreateSearchDBContext(x,x,x,x,x,x)+151p
					; SdbpCreateSearchDBContext(x,x,x,x,x,x)+15Cp ...
		test	edx, edx
		jz	short locret_A220D1
		push	74705041h
		push	edx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

locret_A220D1:				; CODE XREF: AslFree(x,x)+2j
		retn
_AslFree@8	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslRegistryEnumKey(x, x, x,	x)
_AslRegistryEnumKey@16 proc near	; CODE XREF: AslpProcessMatchRegNode(x,x)+91p

var_214		= dword	ptr -214h
var_210		= dword	ptr -210h
var_204		= dword	ptr -204h
var_200		= dword	ptr -200h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 214h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_0]
		and	[ebp+var_214], 0
		push	ebx
		push	edi
		mov	ebx, ecx
		lea	ecx, [ebp+var_214]
		push	ecx
		push	20Ch
		lea	ecx, [ebp+var_210]
		push	ecx
		push	0
		push	[ebp+arg_4]
		push	eax
		call	_ZwEnumerateKey@24 ; ZwEnumerateKey(x,x,x,x,x,x)
		mov	edi, eax
		test	edi, edi
		js	short loc_A22151
		push	esi
		mov	esi, [ebp+var_204]
		shr	esi, 1
		lea	ecx, [esi+1]
		cmp	ecx, 104h
		jb	short loc_A22134
		mov	edi, 0C0000023h
		jmp	short loc_A22150
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22134:				; CODE XREF: AslRegistryEnumKey(x,x,x,x)+59j
		push	[ebp+var_204]	; size_t
		lea	eax, [ebp+var_200]
		push	eax		; void *
		push	ebx		; void *
		call	_memcpy
		add	esp, 0Ch
		xor	eax, eax
		mov	[ebx+esi*2], ax

loc_A22150:				; CODE XREF: AslRegistryEnumKey(x,x,x,x)+60j
		pop	esi

loc_A22151:				; CODE XREF: AslRegistryEnumKey(x,x,x,x)+45j
		mov	ecx, [ebp+var_4]
		mov	eax, edi
		pop	edi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	8
_AslRegistryEnumKey@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslRegistryGetUInt32(x, x, x)
_AslRegistryGetUInt32@12 proc near	; CODE XREF: SdbpQueryAppCompatFlagsByExeID+8A4BDp

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		and	[ebp+var_8], 0
		lea	eax, [ebp+var_8]
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		mov	edi, edx
		mov	ebx, ecx
		push	eax
		call	_RtlInitUnicodeStringEx@8 ; RtlInitUnicodeStringEx(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A221A7
		push	esi
		push	offset ??_C@_0CD@LDGCFCIP@RtlInitUnicodeStringEx?5failed?5?$FL@NNGAKEGL@
		push	3DAh
		push	offset ??_C@_0BF@GLMGGLJH@AslRegistryGetUInt32@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A221B6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A221A7:				; CODE XREF: AslRegistryGetUInt32(x,x,x)+26j
		lea	eax, [ebp+var_8]
		mov	edx, edi
		push	eax
		mov	ecx, ebx
		call	_AslRegistryGetUInt32_UStr@12 ;	AslRegistryGetUInt32_UStr(x,x,x)
		mov	esi, eax

loc_A221B6:				; CODE XREF: AslRegistryGetUInt32(x,x,x)+42j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	4
_AslRegistryGetUInt32@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslRegistryGetUInt32_UStr(x, x, x)
_AslRegistryGetUInt32_UStr@12 proc near	; CODE XREF: SdbResolveDatabaseEx(x,x,x,x,x,x)+1F5p
					; SdbResolveDatabaseEx(x,x,x,x,x,x)+238p ...

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	esi, [ebp+arg_0]
		lea	edi, [ebp+var_18]
		and	[ebp+var_1C], 0
		stosd
		mov	ebx, ecx
		stosd
		and	dword ptr [ebx], 0
		stosd
		stosd
		stosd
		lea	eax, [ebp+var_1C]
		push	eax
		push	14h
		lea	eax, [ebp+var_18]
		push	eax
		push	2
		push	esi
		push	edx
		call	_ZwQueryValueKey@24 ; ZwQueryValueKey(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22227
		cmp	esi, 0C0000034h
		jz	short loc_A2225A
		push	esi
		push	offset ??_C@_0BP@PMIDEKOL@Failed?5to?5query?5key?5value?5?$FL?$CFx?$FN@NNGAKEGL@ ; "Failed to query key	value [%x]"
		push	3A1h
		push	offset ??_C@_0BK@GEIFCLB@AslRegistryGetUInt32_UStr@NNGAKEGL@ ; "AslRegistryGetUInt32_UStr"
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A2225A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22227:				; CODE XREF: AslRegistryGetUInt32_UStr(x,x,x)+42j
		cmp	[ebp+var_14], 4
		jnz	short loc_A2223C
		cmp	[ebp+var_10], 4
		jnz	short loc_A2223C
		mov	eax, [ebp+var_C]
		xor	esi, esi
		mov	[ebx], eax
		jmp	short loc_A2225A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2223C:				; CODE XREF: AslRegistryGetUInt32_UStr(x,x,x)+6Cj
					; AslRegistryGetUInt32_UStr(x,x,x)+72j
		push	offset ??_C@_0BD@BBKBCNOK@Invalid?5value?5type@NNGAKEGL@ ; "Invalid value type"
		push	3A8h
		push	offset ??_C@_0BK@GEIFCLB@AslRegistryGetUInt32_UStr@NNGAKEGL@ ; "AslRegistryGetUInt32_UStr"
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		mov	esi, 0C0000024h

loc_A2225A:				; CODE XREF: AslRegistryGetUInt32_UStr(x,x,x)+4Aj
					; AslRegistryGetUInt32_UStr(x,x,x)+66j	...
		mov	ecx, [ebp+var_4]
		mov	eax, esi
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	4
_AslRegistryGetUInt32_UStr@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslRegistryOpenSubKey(x, x,	x, x)
_AslRegistryOpenSubKey@16 proc near	; CODE XREF: AslpProcessMatchRegNode(x,x)+105p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		mov	edi, ecx
		xor	eax, eax
		mov	[ebp+var_8], eax
		mov	ebx, edx
		mov	[ebp+var_4], eax
		mov	[edi], eax
		lea	eax, [ebp+var_8]
		push	eax
		call	_RtlInitUnicodeStringEx@8 ; RtlInitUnicodeStringEx(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A222B6
		push	esi
		push	offset ??_C@_0CL@KEPLONEJ@AslRegistryOpenSubKey?5passed?5ba@NNGAKEGL@ ;	"AslRegistryOpenSubKey passed bad Path ["...
		push	31Ch
		push	offset ??_C@_0BG@KMCFDHP@AslRegistryOpenSubKey@NNGAKEGL@ ; "AslRegistryOpenSubKey"
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		mov	eax, esi
		jmp	short loc_A222E4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A222B6:				; CODE XREF: AslRegistryOpenSubKey(x,x,x,x)+29j
		and	[ebp+var_10], 0
		lea	eax, [ebp+var_8]
		and	[ebp+var_C], 0
		mov	[ebp+var_18], eax
		lea	eax, [ebp+var_20]
		push	eax
		push	20019h
		push	edi
		mov	[ebp+var_20], 18h
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_14], 240h
		call	_ZwOpenKey@12	; ZwOpenKey(x,x,x)

loc_A222E4:				; CODE XREF: AslRegistryOpenSubKey(x,x,x,x)+47j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
_AslRegistryOpenSubKey@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslFileMappingEnsure(x)
_AslFileMappingEnsure@4	proc near	; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+30p
					; AslFileMappingGetImageTypeEx(x,x,x,x,x)+3Ap ...
		mov	edi, edi
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		xor	edi, edi
		cmp	[esi+30h], edi
		jz	short loc_A22312
		cmp	dword ptr [esi+28h], 1
		jz	short loc_A2231F
		mov	eax, [esi+18h]
		neg	eax
		sbb	eax, eax
		and	eax, 3FFFFB93h
		add	eax, 0C000046Dh
		jmp	short loc_A22378
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22312:				; CODE XREF: AslFileMappingEnsure(x)+Cj
		cmp	[esi+18h], edi
		jnz	short loc_A22376
		lea	ebx, [esi+28h]
		cmp	dword ptr [ebx], 1
		jnz	short loc_A22326

loc_A2231F:				; CODE XREF: AslFileMappingEnsure(x)+12j
		mov	eax, 0C000011Eh
		jmp	short loc_A22378
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22326:				; CODE XREF: AslFileMappingEnsure(x)+32j
		lea	ecx, [esi+8]
		xor	dl, dl
		call	_RtlFileMapMapView@8 ; RtlFileMapMapView(x,x)
		mov	edi, eax
		test	edi, edi
		js	short loc_A22376
		cmp	byte ptr [esi+27h], 0
		jz	short loc_A22344
		mov	dword ptr [ebx], 6
		jmp	short loc_A22376
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22344:				; CODE XREF: AslFileMappingEnsure(x)+4Fj
		mov	edx, ebx
		lea	ecx, [esi+8]
		call	AslpFileMappingGetFileKind
		mov	edi, eax
		test	edi, edi
		jns	short loc_A22376
		push	edi
		push	dword ptr [esi]
		push	offset ??_C@_0CK@IADOKJDF@AslpFileMappingGetFileKind?5fail@NNGAKEGL@
		push	24Fh
		push	offset ??_C@_0BF@GCAEIEGC@AslFileMappingEnsure@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 18h
		mov	dword ptr [ebx], 3

loc_A22376:				; CODE XREF: AslFileMappingEnsure(x)+2Aj
					; AslFileMappingEnsure(x)+49j ...
		mov	eax, edi

loc_A22378:				; CODE XREF: AslFileMappingEnsure(x)+25j
					; AslFileMappingEnsure(x)+39j
		pop	edi
		pop	esi
		pop	ebx
		retn
_AslFileMappingEnsure@4	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslFileMappingEnsureMappedAs(x, x)
_AslFileMappingEnsureMappedAs@8	proc near
					; CODE XREF: SdbOpenDatabaseEx(x,x,x,x):loc_A1E826p
					; SdbpCheckMatchingTextEntry(x,x,x,x,x,x,x,x,x)+DDp ...
		mov	edi, edi
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		cmp	dword ptr [edi+30h], 0
		lea	ebx, [edi+28h]
		mov	eax, [ebx]
		jz	short loc_A2239A
		cmp	eax, 1
		jz	short loc_A2239F
		mov	eax, 0C000046Dh
		jmp	short loc_A2240A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2239A:				; CODE XREF: AslFileMappingEnsureMappedAs(x,x)+10j
		cmp	eax, 1
		jnz	short loc_A223A6

loc_A2239F:				; CODE XREF: AslFileMappingEnsureMappedAs(x,x)+15j
		mov	eax, 0C000011Eh
		jmp	short loc_A2240A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A223A6:				; CODE XREF: AslFileMappingEnsureMappedAs(x,x)+21j
		lea	ecx, [edi+8]
		xor	dl, dl
		call	_RtlFileMapMapView@8 ; RtlFileMapMapView(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A223C8
		cmp	esi, 0C000010Eh
		jnz	short loc_A22408
		cmp	byte ptr [edi+27h], 0
		jnz	short loc_A22408
		xor	esi, esi
		jmp	short loc_A22408
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A223C8:				; CODE XREF: AslFileMappingEnsureMappedAs(x,x)+38j
		cmp	byte ptr [edi+27h], 0
		jz	short loc_A223D6
		mov	dword ptr [ebx], 6
		jmp	short loc_A22408
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A223D6:				; CODE XREF: AslFileMappingEnsureMappedAs(x,x)+50j
		mov	edx, ebx
		lea	ecx, [edi+8]
		call	AslpFileMappingGetFileKind
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22408
		push	esi
		push	dword ptr [edi]
		push	offset ??_C@_0CK@IADOKJDF@AslpFileMappingGetFileKind?5fail@NNGAKEGL@
		push	1F7h
		push	(offset	loc_8C4C8A+4)
		push	1
		call	AslLogCallPrintf
		add	esp, 18h
		mov	dword ptr [ebx], 3

loc_A22408:				; CODE XREF: AslFileMappingEnsureMappedAs(x,x)+40j
					; AslFileMappingEnsureMappedAs(x,x)+46j ...
		mov	eax, esi

loc_A2240A:				; CODE XREF: AslFileMappingEnsureMappedAs(x,x)+1Cj
					; AslFileMappingEnsureMappedAs(x,x)+28j
		pop	edi
		pop	esi
		pop	ebx
		retn
_AslFileMappingEnsureMappedAs@8	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslFileMappingGetFileKindDetail(x, x)
_AslFileMappingGetFileKindDetail@8 proc	near
					; CODE XREF: AslpFileGetFileKindDetailAttribute(x,x)+12p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_14], ecx
		mov	edi, edx
		mov	[ebp+var_8], eax
		mov	ebx, eax
		mov	[ebp+var_4], eax
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], eax
		cmp	dword ptr [edi+28h], 1
		jnz	short loc_A2243C
		inc	ebx
		mov	esi, eax
		jmp	loc_A2255D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2243C:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+24j
		mov	ecx, edi
		call	_AslFileMappingEnsure@4	; AslFileMappingEnsure(x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22468
		push	esi
		push	offset ??_C@_0CB@GHEHFDAF@AslFileMappingEnsure?5failed?5?$FL?$CFx@NNGAKEGL@
		push	550h

loc_A22454:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+91j
					; AslFileMappingGetFileKindDetail(x,x)+B8j
		push	offset ??_C@_0CA@FHIHKCPF@AslFileMappingGetFileKindDetail@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A2255D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22468:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+39j
		mov	ecx, [edi+28h]
		mov	eax, ecx
		sub	eax, 3
		jz	loc_A22558
		sub	eax, 1
		jz	loc_A22554
		sub	eax, 1
		jz	loc_A22550
		sub	eax, 1
		jz	short loc_A224A1
		push	ecx
		push	offset ??_C@_0BM@LFKGHHKF@Unhandled?5ASL_FILE_KIND?3?5?$CFd@NNGAKEGL@
		xor	ebx, ebx
		mov	esi, 0C0000001h
		push	573h
		jmp	short loc_A22454
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A224A1:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+7Dj
		push	edi
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	edx, [ebp+var_4]
		lea	ecx, [ebp+var_8]
		call	_AslFileMappingGetImageTypeEx@20 ; AslFileMappingGetImageTypeEx(x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A224C8
		push	esi
		push	(offset	loc_8C4DF9+3)
		push	57Dh
		jmp	short loc_A22454
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A224C8:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+ABj
		mov	eax, 20Bh
		cmp	[ebp+var_C], ebx
		jz	short loc_A22500
		cmp	word ptr [ebp+var_4], ax
		jnz	short loc_A224DC
		push	0Fh
		jmp	short loc_A2255A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A224DC:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+C8j
		mov	ebx, [ebp+var_10]
		mov	ecx, 20002h
		mov	eax, ebx
		and	eax, ecx
		cmp	eax, ecx
		jnz	short loc_A224F0
		push	0Eh
		jmp	short loc_A2255A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A224F0:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+DCj
		and	ebx, 20003h
		dec	ebx
		neg	ebx
		sbb	ebx, ebx
		add	ebx, 0Dh
		jmp	short loc_A2255B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22500:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+C2j
		cmp	word ptr [ebp+var_4], ax
		movzx	eax, word ptr [ebp+var_8]
		jnz	short loc_A22533
		cmp	eax, 200h
		jz	short loc_A2252F
		cmp	eax, 8664h
		jz	short loc_A2252B
		xor	ebx, ebx
		cmp	eax, 0AA64h
		setz	bl
		lea	ebx, ds:8[ebx*2]
		jmp	short loc_A2255B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2252B:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+108j
		push	9
		jmp	short loc_A2255A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2252F:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+101j
		push	0Bh
		jmp	short loc_A2255A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22533:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+FAj
		sub	eax, 14Ch
		jz	short loc_A2254C
		sub	eax, 74h
		jz	short loc_A22548
		sub	eax, 4
		jz	short loc_A22548
		push	5
		jmp	short loc_A2255A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22548:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+12Fj
					; AslFileMappingGetFileKindDetail(x,x)+134j
		push	7
		jmp	short loc_A2255A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2254C:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+12Aj
		push	6
		jmp	short loc_A2255A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22550:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+74j
		push	4
		jmp	short loc_A2255A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22554:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+6Bj
		push	3
		jmp	short loc_A2255A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22558:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+62j
		push	2

loc_A2255A:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+CCj
					; AslFileMappingGetFileKindDetail(x,x)+E0j ...
		pop	ebx

loc_A2255B:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+F0j
					; AslFileMappingGetFileKindDetail(x,x)+11Bj
		xor	esi, esi

loc_A2255D:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+29j
					; AslFileMappingGetFileKindDetail(x,x)+55j
		mov	eax, [ebp+var_14]
		test	eax, eax
		jz	short loc_A22566
		mov	[eax], ebx

loc_A22566:				; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+154j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
_AslFileMappingGetFileKindDetail@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslFileMappingGetImageTypeEx(x, x, x, x, x)
_AslFileMappingGetImageTypeEx@20 proc near
					; CODE XREF: AslFileMappingGetFileKindDetail(x,x)+A2p

var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	2Ch
		push	offset dword_6AAC40
		call	__SEH_prolog4
		mov	[ebp+var_3C], edx
		mov	[ebp+var_38], ecx
		xor	eax, eax
		mov	[ebp+var_1C], eax
		mov	ebx, eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_28], eax
		mov	[ebp+var_2C], eax
		mov	[ebp+var_30], eax
		mov	edi, [ebp+arg_8]
		cmp	dword ptr [edi+28h], 1
		jnz	short loc_A225A5

loc_A2259B:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+68j
		mov	esi, 0C000007Bh
		jmp	loc_A226BB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A225A5:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+2Cj
		mov	ecx, edi
		call	_AslFileMappingEnsure@4	; AslFileMappingEnsure(x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A225D1
		push	esi
		push	offset ??_C@_0CB@GHEHFDAF@AslFileMappingEnsure?5failed?5?$FL?$CFx@NNGAKEGL@
		push	44Eh

loc_A225BD:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+85j
		push	offset ??_C@_0BN@BGNMOAPO@AslFileMappingGetImageTypeEx@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A226BB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A225D1:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+43j
		cmp	dword ptr [edi+28h], 6
		jnz	short loc_A2259B
		mov	edx, edi
		lea	ecx, [ebp+var_1C]
		call	_AslpFileGetImageNtHeader@8 ; AslpFileGetImageNtHeader(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A225F4
		push	esi
		push	offset ??_C@_0CF@GGCNCAGG@AslpFileGetImageNtHeader?5failed@NNGAKEGL@
		push	462h
		jmp	short loc_A225BD
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A225F4:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+78j
		mov	ecx, [ebp+var_1C]
		movzx	eax, word ptr [ecx+4]
		mov	[ebp+var_24], eax
		movzx	edx, word ptr [ecx+18h]
		mov	eax, edx
		mov	[ebp+var_28], eax
		cmp	[edi+30h], ebx
		jz	short loc_A22613

loc_A2260C:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+AEj
					; AslFileMappingGetImageTypeEx(x,x,x,x,x)+D4j
		xor	esi, esi
		jmp	loc_A226BB
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22613:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+9Dj
		cmp	[ebp+arg_0], ebx
		jnz	short loc_A2261D
		cmp	[ebp+arg_4], ebx
		jz	short loc_A2260C

loc_A2261D:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+A9j
		mov	eax, 10Bh
		cmp	dx, ax
		jnz	short loc_A2262F
		mov	ebx, [ecx+0E8h]
		jmp	short loc_A2263F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2262F:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+B8j
		mov	eax, 20Bh
		cmp	dx, ax
		jnz	short loc_A2263F
		mov	ebx, [ecx+0F8h]

loc_A2263F:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+C0j
					; AslFileMappingGetImageTypeEx(x,x,x,x,x)+CAj
		test	ebx, ebx
		jz	short loc_A2260C
		and	[ebp+ms_exc.disabled], 0
		push	ebx
		lea	edx, [edi+8]
		call	_AslpImageRvaToVa@12 ; AslpImageRvaToVa(x,x,x)
		test	eax, eax
		jnz	short loc_A2266F
		push	offset ??_C@_0BP@GNNEOEPF@Failed?5to?5find?5the?5Cor20Header@NNGAKEGL@
		push	498h
		push	offset ??_C@_0BN@BGNMOAPO@AslFileMappingGetImageTypeEx@NNGAKEGL@
		push	2
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A2267C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2266F:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+E5j
		mov	[ebp+var_2C], 1
		mov	eax, [eax+10h]
		mov	[ebp+var_30], eax

loc_A2267C:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+100j
		xor	esi, esi
		mov	[ebp+var_20], esi
		jmp	short loc_A226B4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22683:				; DATA XREF: .text:006AAC54o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_34], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22691:				; DATA XREF: .text:006AAC58o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_34]
		mov	[ebp+var_20], esi
		push	esi
		push	(offset	loc_8C4D43+3)
		push	4A5h
		push	offset ??_C@_0BN@BGNMOAPO@AslFileMappingGetImageTypeEx@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A226B4:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+114j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh

loc_A226BB:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+33j
					; AslFileMappingGetImageTypeEx(x,x,x,x,x)+5Fj ...
		mov	ecx, [ebp+var_38]
		test	ecx, ecx
		jz	short loc_A226C9
		mov	ax, word ptr [ebp+var_24]
		mov	[ecx], ax

loc_A226C9:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+153j
		mov	ecx, [ebp+var_3C]
		test	ecx, ecx
		jz	short loc_A226D7
		mov	ax, word ptr [ebp+var_28]
		mov	[ecx], ax

loc_A226D7:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+161j
		mov	ecx, [ebp+arg_0]
		test	ecx, ecx
		jz	short loc_A226E3
		mov	eax, [ebp+var_2C]
		mov	[ecx], eax

loc_A226E3:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+16Fj
		mov	ecx, [ebp+arg_4]
		test	ecx, ecx
		jz	short loc_A226EF
		mov	eax, [ebp+var_30]
		mov	[ecx], eax

loc_A226EF:				; CODE XREF: AslFileMappingGetImageTypeEx(x,x,x,x,x)+17Bj
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
_AslFileMappingGetImageTypeEx@20 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslHashFree(x)
_AslHashFree@4	proc near		; CODE XREF: SdbpReleaseSearchDBContext(x)+5Ep
					; SdbpReleaseSearchDBContext(x)+6Ep ...
		mov	edi, edi
		push	edi
		mov	edi, ecx
		test	edi, edi
		jz	short loc_A22760
		mov	eax, [edi+4]
		test	eax, eax
		jz	short loc_A22755
		push	ebx
		xor	ebx, ebx
		cmp	[edi], ebx
		jle	short loc_A22745
		push	esi

loc_A2271B:				; CODE XREF: AslHashFree(x)+3Dj
		mov	ecx, [eax+ebx*4]
		mov	edx, eax
		test	ecx, ecx
		jz	short loc_A2273D

loc_A22724:				; CODE XREF: AslHashFree(x)+33j
		mov	esi, [ecx+8]
		push	74705041h
		push	ecx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	ecx, esi
		test	esi, esi
		jnz	short loc_A22724
		mov	eax, [edi+4]
		mov	edx, eax

loc_A2273D:				; CODE XREF: AslHashFree(x)+1Fj
		inc	ebx
		cmp	ebx, [edi]
		jl	short loc_A2271B
		mov	eax, edx
		pop	esi

loc_A22745:				; CODE XREF: AslHashFree(x)+15j
		pop	ebx
		test	eax, eax
		jz	short loc_A22755
		push	74705041h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A22755:				; CODE XREF: AslHashFree(x)+Ej
					; AslHashFree(x)+45j
		push	74705041h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A22760:				; CODE XREF: AslHashFree(x)+7j
		pop	edi
		retn
_AslHashFree@4	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslPathCleanUstr(x)
_AslPathCleanUstr@4 proc near		; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+A2p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		mov	ebx, ecx
		push	esi
		push	edi
		push	2
		movzx	eax, word ptr [ebx]
		mov	cx, ax
		shr	cx, 1
		movzx	edx, cx
		mov	[ebp+var_8], edx
		pop	edx
		cmp	ax, dx
		jb	loc_A22A15
		mov	eax, [ebx+4]
		xor	edx, edx
		cmp	[eax], dx
		jz	loc_A22A15
		movzx	edi, cx
		push	8
		pop	ecx
		cmp	di, cx
		jb	short loc_A227BA
		push	ecx		; size_t
		push	(offset	loc_5A7307+1) ;	wchar_t	*
		push	eax		; wchar_t *
		call	__wcsnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_A227BA
		push	5
		jmp	short loc_A227D9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A227BA:				; CODE XREF: AslPathCleanUstr(x)+3Fj
					; AslPathCleanUstr(x)+52j
		push	4
		pop	esi
		cmp	di, si
		jb	short loc_A22806
		push	esi		; size_t
		push	offset ??_C@_19JHEHLFPM@?$AA?2?$AA?$DP?$AA?$DP?$AA?2@FNODOBFM@ ; wchar_t *
		push	dword ptr [ebx+4] ; wchar_t *
		call	_wcsncmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_A227DC
		push	3

loc_A227D9:				; CODE XREF: AslPathCleanUstr(x)+56j
		pop	esi
		jmp	short loc_A22826
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A227DC:				; CODE XREF: AslPathCleanUstr(x)+73j
		push	esi		; size_t
		push	(offset	loc_5A72FD+1) ;	wchar_t	*
		push	dword ptr [ebx+4] ; wchar_t *
		call	_wcsncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A22826
		push	esi		; size_t
		push	(offset	loc_5A7319+1) ;	wchar_t	*
		push	dword ptr [ebx+4] ; wchar_t *
		call	_wcsncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A22826

loc_A22806:				; CODE XREF: AslPathCleanUstr(x)+5Ej
		push	2
		pop	eax
		cmp	di, ax
		jbe	short loc_A22823
		push	eax		; size_t
		push	(offset	loc_5A7323+1) ;	wchar_t	*
		push	dword ptr [ebx+4] ; wchar_t *
		call	_wcsncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A22826

loc_A22823:				; CODE XREF: AslPathCleanUstr(x)+AAj
		xor	esi, esi
		inc	esi

loc_A22826:				; CODE XREF: AslPathCleanUstr(x)+78j
					; AslPathCleanUstr(x)+8Dj ...
		movzx	edx, word ptr [ebx]
		xor	eax, eax
		push	5Ch
		mov	[ebp+var_4], eax
		pop	edi
		mov	[ebp+var_14], 2Fh

loc_A22838:				; CODE XREF: AslPathCleanUstr(x)+FDj
		movzx	ecx, ax
		add	ecx, ecx
		cmp	ecx, edx
		jnb	short loc_A22861
		mov	eax, [ebx+4]
		movzx	eax, word ptr [ecx+eax]
		cmp	ax, di
		jz	short loc_A22855
		push	2Fh
		pop	ecx
		cmp	ax, cx
		jnz	short loc_A22856

loc_A22855:				; CODE XREF: AslPathCleanUstr(x)+E9j
		dec	esi

loc_A22856:				; CODE XREF: AslPathCleanUstr(x)+F1j
		mov	eax, [ebp+var_4]
		inc	eax
		mov	[ebp+var_4], eax
		test	esi, esi
		jg	short loc_A22838

loc_A22861:				; CODE XREF: AslPathCleanUstr(x)+DDj
		movzx	edi, ax
		movzx	esi, ax
		mov	[ebp+var_10], edi
		cmp	ax, word ptr [ebp+var_8]
		jnb	loc_A229DF
		mov	[ebp+var_18], 2Eh

loc_A2287B:				; CODE XREF: AslPathCleanUstr(x)+277j
		cmp	di, si
		jb	loc_A229F5
		mov	edx, [ebx+4]
		movzx	eax, di
		push	5Ch
		mov	[ebp+var_C], eax
		pop	ecx
		movzx	eax, word ptr [edx+eax*2]
		cmp	ax, cx
		jz	loc_A229B3
		cmp	ax, word ptr [ebp+var_14]
		jz	loc_A229B3
		cmp	ax, word ptr [ebp+var_18]
		jnz	loc_A229A5
		mov	eax, [ebp+var_8]
		movzx	eax, ax
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+var_C]
		inc	eax
		cmp	eax, [ebp+var_1C]
		jz	loc_A229DF
		mov	eax, [ebp+var_C]
		movzx	eax, word ptr [edx+eax*2+2]
		cmp	ax, cx
		mov	ecx, [ebp+var_4]
		jz	loc_A22974
		cmp	ax, word ptr [ebp+var_14]
		jz	loc_A22974
		cmp	ax, word ptr [ebp+var_18]
		jnz	loc_A229D1
		mov	eax, [ebp+var_C]
		add	eax, 2
		cmp	eax, [ebp+var_1C]
		jz	short loc_A22912
		movzx	eax, word ptr [edx+eax*2]
		push	5Ch
		pop	edx
		cmp	ax, dx
		jz	short loc_A22912
		push	2Fh
		pop	edx
		cmp	ax, dx
		jnz	loc_A229D1

loc_A22912:				; CODE XREF: AslPathCleanUstr(x)+196j
					; AslPathCleanUstr(x)+1A2j
		cmp	si, cx
		jb	short loc_A22973

loc_A22917:				; CODE XREF: AslPathCleanUstr(x)+1D9j
		mov	ecx, [ebx+4]
		xor	edi, edi
		movzx	edx, si
		push	5Ch
		movzx	eax, word ptr [ecx+edx*2]
		mov	[ecx+edx*2], di
		mov	edi, [ebp+var_4]
		pop	ecx
		cmp	ax, cx
		jz	short loc_A2293D
		add	esi, 0FFFFh
		cmp	si, di
		jnb	short loc_A22917

loc_A2293D:				; CODE XREF: AslPathCleanUstr(x)+1CEj
		cmp	si, di
		mov	edi, [ebp+var_10]
		jb	short loc_A22973

loc_A22945:				; CODE XREF: AslPathCleanUstr(x)+207j
		mov	ecx, [ebx+4]
		xor	edi, edi
		movzx	edx, si
		push	5Ch
		movzx	eax, word ptr [ecx+edx*2]
		mov	[ecx+edx*2], di
		mov	edi, [ebp+var_4]
		pop	ecx
		cmp	ax, cx
		jz	short loc_A2296B
		add	esi, 0FFFFh
		cmp	si, di
		jnb	short loc_A22945

loc_A2296B:				; CODE XREF: AslPathCleanUstr(x)+1FCj
		cmp	si, di
		mov	edi, [ebp+var_10]
		jnb	short loc_A22974

loc_A22973:				; CODE XREF: AslPathCleanUstr(x)+1B3j
					; AslPathCleanUstr(x)+1E1j
		inc	esi

loc_A22974:				; CODE XREF: AslPathCleanUstr(x)+173j
					; AslPathCleanUstr(x)+17Dj ...
		inc	edi
		jmp	short loc_A229D1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22977:				; CODE XREF: AslPathCleanUstr(x)+247j
		mov	edx, [ebx+4]
		movzx	eax, di
		mov	[ebp+var_1C], edx
		push	5Ch
		movzx	edx, word ptr [edx+eax*2]
		pop	eax
		cmp	dx, ax
		jz	short loc_A229AB
		push	2Fh
		pop	eax
		cmp	dx, ax
		jz	short loc_A229AB
		cmp	di, si
		jz	short loc_A229A3
		mov	ecx, [ebp+var_1C]
		movzx	eax, si
		mov	[ecx+eax*2], dx

loc_A229A3:				; CODE XREF: AslPathCleanUstr(x)+235j
		inc	esi
		inc	edi

loc_A229A5:				; CODE XREF: AslPathCleanUstr(x)+149j
		cmp	di, word ptr [ebp+var_8]
		jb	short loc_A22977

loc_A229AB:				; CODE XREF: AslPathCleanUstr(x)+228j
					; AslPathCleanUstr(x)+230j
		add	edi, 0FFFFh
		jmp	short loc_A229D1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A229B3:				; CODE XREF: AslPathCleanUstr(x)+135j
					; AslPathCleanUstr(x)+13Fj
		test	si, si
		jz	short loc_A229C7
		movzx	eax, si
		push	5Ch
		pop	ecx
		cmp	[edx+eax*2-2], cx
		jz	short loc_A229D1
		jmp	short loc_A229C9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A229C7:				; CODE XREF: AslPathCleanUstr(x)+254j
		xor	eax, eax

loc_A229C9:				; CODE XREF: AslPathCleanUstr(x)+263j
		push	5Ch
		pop	ecx
		mov	[edx+eax*2], cx
		inc	esi

loc_A229D1:				; CODE XREF: AslPathCleanUstr(x)+187j
					; AslPathCleanUstr(x)+1AAj ...
		inc	edi
		mov	[ebp+var_10], edi
		cmp	di, word ptr [ebp+var_8]
		jb	loc_A2287B

loc_A229DF:				; CODE XREF: AslPathCleanUstr(x)+10Cj
					; AslPathCleanUstr(x)+15Fj
		mov	eax, [ebx+4]
		xor	edx, edx
		movzx	ecx, si
		mov	[eax+ecx*2], dx
		lea	eax, [esi+esi]
		mov	[ebx], ax
		xor	eax, eax
		jmp	short loc_A22A38
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A229F5:				; CODE XREF: AslPathCleanUstr(x)+11Cj
		push	(offset	loc_8C4E7A+4)
		push	2E9h
		push	(offset	loc_8C4EED+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		mov	eax, 0C00000E5h
		jmp	short loc_A22A38
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22A15:				; CODE XREF: AslPathCleanUstr(x)+22j
					; AslPathCleanUstr(x)+30j
		push	0C00000F2h
		push	(offset	loc_8C4ECB+1)
		push	2DDh
		push	(offset	loc_8C4EED+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		mov	eax, 0C00000F2h

loc_A22A38:				; CODE XREF: AslPathCleanUstr(x)+291j
					; AslPathCleanUstr(x)+2B1j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslPathCleanUstr@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslPathCombine(x, x, x, x)
_AslPathCombine@16 proc	near		; CODE XREF: SdbpGetPathAppPatchPreRS3(x,x,x,x)+F8p
					; SdbpGetPathCustomSdbPreRS3(x,x,x,x)+DBp ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		and	[ebp+var_8], 0
		mov	eax, ecx
		and	[ebp+var_4], 0
		push	ebx
		mov	ebx, [ebp+arg_4]
		mov	[ebp+var_C], eax
		push	edi
		mov	edi, edx
		test	ebx, ebx
		jnz	short loc_A22A67
		mov	eax, 0C0000023h
		jmp	loc_A22B4D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22A67:				; CODE XREF: AslPathCombine(x,x,x,x)+1Ej
		push	esi
		lea	ecx, [ebp+var_8]
		mov	edx, 7FFFFFFFh
		push	ecx
		mov	ecx, eax
		call	_RtlStringCchLengthW@12	; RtlStringCchLengthW(x,x,x)
		mov	esi, eax
		test	esi, esi
		js	loc_A22B30
		lea	eax, [ebp+var_4]
		mov	edx, 7FFFFFFFh
		push	eax
		mov	ecx, edi
		call	_RtlStringCchLengthW@12	; RtlStringCchLengthW(x,x,x)
		mov	esi, eax
		test	esi, esi
		js	loc_A22B30
		mov	ecx, [ebp+var_8]
		test	ecx, ecx
		jnz	short loc_A22AC4
		cmp	[ebp+var_4], ecx
		jnz	short loc_A22AB5
		mov	eax, [ebp+arg_0]
		xor	esi, esi
		mov	[eax], cx
		jmp	loc_A22B4A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22AB5:				; CODE XREF: AslPathCombine(x,x,x,x)+69j
		push	edi

loc_A22AB6:				; CODE XREF: AslPathCombine(x,x,x,x)+91j
		mov	ecx, [ebp+arg_0]
		mov	edx, ebx
		call	RtlStringCchCopyW
		mov	esi, eax
		jmp	short loc_A22B2C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22AC4:				; CODE XREF: AslPathCombine(x,x,x,x)+64j
		cmp	[ebp+var_4], 0
		mov	eax, [ebp+var_C]
		jnz	short loc_A22AD0
		push	eax
		jmp	short loc_A22AB6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22AD0:				; CODE XREF: AslPathCombine(x,x,x,x)+8Ej
		push	5Ch
		xor	ebx, ebx
		pop	edx
		cmp	[eax+ecx*2-2], dx
		setz	bl
		cmp	[edi], dx
		jnz	short loc_A22AE3
		inc	ebx

loc_A22AE3:				; CODE XREF: AslPathCombine(x,x,x,x)+A3j
		cmp	ebx, 1
		jbe	short loc_A22AEC
		add	edi, 2
		dec	ebx

loc_A22AEC:				; CODE XREF: AslPathCombine(x,x,x,x)+A9j
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		push	eax
		call	RtlStringCchCopyW
		mov	esi, eax
		test	esi, esi
		js	short loc_A22B30
		test	ebx, ebx
		jnz	short loc_A22B18
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		push	offset ??_C@_13FPGAJAPJ@?$AA?2@NNGAKEGL@
		call	_RtlStringCchCatW@12 ; RtlStringCchCatW(x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A22B30

loc_A22B18:				; CODE XREF: AslPathCombine(x,x,x,x)+C3j
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		push	edi
		call	_RtlStringCchCatW@12 ; RtlStringCchCatW(x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A22B30
		xor	esi, esi

loc_A22B2C:				; CODE XREF: AslPathCombine(x,x,x,x)+85j
		test	esi, esi
		jns	short loc_A22B4A

loc_A22B30:				; CODE XREF: AslPathCombine(x,x,x,x)+3Fj
					; AslPathCombine(x,x,x,x)+59j ...
		push	esi
		push	offset ??_C@_0BN@EJJJFBGC@An?5RtlString?5API?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	593h
		push	offset ??_C@_0P@HNMKLMPG@AslPathCombine@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A22B4A:				; CODE XREF: AslPathCombine(x,x,x,x)+73j
					; AslPathCombine(x,x,x,x)+F1j
		mov	eax, esi
		pop	esi

loc_A22B4D:				; CODE XREF: AslPathCombine(x,x,x,x)+25j
		pop	edi
		pop	ebx
		leave
		retn	8
_AslPathCombine@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __fastcall AslPathToSystemPathBuf(void *,int,int)
_AslPathToSystemPathBuf@12 proc	near	; CODE XREF: SdbpGetPathAppPatch(x,x,x,x)+80p
					; AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+66p ...

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	ebx, ecx
		lea	eax, [edi+edi]
		push	eax		; size_t
		push	0		; int
		push	ebx		; void *
		call	_memset
		add	esp, 0Ch
		mov	edx, edi
		mov	ecx, ebx
		push	offset ??_C@_1BI@OMNCDEIM@?$AA?2?$AAS?$AAy?$AAs?$AAt?$AAe?$AAm?$AAR?$AAo?$AAo?$AAt@NNGAKEGL@
		call	RtlStringCchCopyW
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22B9B
		push	esi
		push	(offset	loc_8C4F19+1)
		push	5C6h
		push	offset ??_C@_0BH@FBHBCBNC@AslPathToSystemPathBuf@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		jmp	short loc_A22BC9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22B9B:				; CODE XREF: AslPathToSystemPathBuf(x,x,x)+2Dj
		push	[ebp+arg_0]
		mov	edx, edi
		mov	ecx, ebx
		call	_RtlStringCchCatW@12 ; RtlStringCchCatW(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22BCC
		push	esi
		push	offset ??_C@_0BK@PABECCHN@Failed?5to?5cat?5string?5?$FL?$CFx?$FN@NNGAKEGL@
		push	5D7h
		push	offset ??_C@_0BH@FBHBCBNC@AslPathToSystemPathBuf@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		mov	esi, 0C000000Dh

loc_A22BC9:				; CODE XREF: AslPathToSystemPathBuf(x,x,x)+46j
		add	esp, 14h

loc_A22BCC:				; CODE XREF: AslPathToSystemPathBuf(x,x,x)+58j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
_AslPathToSystemPathBuf@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslPathWildcardFindClose(x)
_AslPathWildcardFindClose@4 proc near	; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+125p
					; SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+20Ep

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		mov	esi, ecx
		test	esi, esi
		jz	short loc_A22BFB
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_A22BFB
		cmp	eax, 0FFFFFFFFh
		jz	short loc_A22BF8
		lea	ecx, [ebp+var_4]
		mov	[ebp+var_4], eax
		call	_AslpPathWildcardFreeFindContext@4 ; AslpPathWildcardFreeFindContext(x)

loc_A22BF8:				; CODE XREF: AslPathWildcardFindClose(x)+16j
		and	dword ptr [esi], 0

loc_A22BFB:				; CODE XREF: AslPathWildcardFindClose(x)+Bj
					; AslPathWildcardFindClose(x)+11j
		pop	esi
		leave
		retn
_AslPathWildcardFindClose@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; int __stdcall	AslPathWildcardFindFirst(void *,int)
_AslPathWildcardFindFirst@16 proc near	; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+14Bp

var_3C		= dword	ptr -3Ch
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		push	ebx
		mov	edx, ecx
		mov	[ebp+var_10], edx
		push	esi
		push	edi
		test	edx, edx
		jnz	short loc_A22C1C
		mov	eax, 0C00000EFh
		jmp	loc_A2310F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22C1C:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+12j
		mov	ebx, [ebp+arg_0]
		test	ebx, ebx
		jz	loc_A2310A
		xor	eax, eax
		cmp	[ebx], ax
		jz	loc_A2310A
		mov	ecx, [ebp+arg_4]
		test	ecx, ecx
		jnz	short loc_A22C43
		mov	eax, 0C00000F2h
		jmp	loc_A2310F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22C43:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+39j
		and	dword ptr [ecx], 0
		lea	edi, [ebp+var_3C]
		mov	[ebp+var_14], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_4], eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_2C], eax
		mov	[ebp+var_28], eax
		xor	eax, eax
		stosd
		push	ebx		; void *
		stosd
		stosd
		stosd
		xor	eax, eax
		mov	[edx], ax
		lea	eax, [ebp+var_24]
		push	eax		; int
		call	RtlCreateUnicodeString
		test	al, al
		jnz	short loc_A22C9D
		push	offset ??_C@_0BO@PAMJCGGK@RtlCreateUnicodeString?5failed@NNGAKEGL@
		mov	esi, 0C0000017h
		push	8C3h

loc_A22C86:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+146j
		push	(offset	loc_8C4FB3+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 10h

loc_A22C95:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+C7j
					; AslPathWildcardFindFirst(x,x,x,x)+105j
		mov	edi, [ebp+arg_4]
		jmp	loc_A230D4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22C9D:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+77j
		lea	ecx, [ebp+var_24]
		call	_AslPathCleanUstr@4 ; AslPathCleanUstr(x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22CC7
		push	esi
		push	offset ??_C@_0BN@CGGIFPNM@AslPathCleanUstr?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	8D8h

loc_A22CB6:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+E9j
					; AslPathWildcardFindFirst(x,x,x,x)+127j ...
		push	(offset	loc_8C4FB3+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A22C95
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22CC7:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+ABj
		mov	ecx, [ebp+var_24]
		lea	eax, [ebp+var_8]
		push	eax
		push	4
		pop	edx
		call	_RtlUShortAdd@12 ; RtlUShortAdd(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22CE9
		push	esi
		push	offset ??_C@_0BJ@MDGLKPJG@RtlUShortAdd?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	8DEh
		jmp	short loc_A22CB6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22CE9:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+DCj
		movzx	esi, word ptr [ebp+var_8]
		push	ecx
		mov	edx, esi
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	ecx, eax
		mov	[ebp+var_4], ecx
		test	ecx, ecx
		jnz	short loc_A22D05

loc_A22CFE:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+1B6j
		mov	esi, 0C0000017h
		jmp	short loc_A22C95
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22D05:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+FEj
		movzx	eax, word ptr [ebp+var_24]
		mov	edx, esi
		push	eax
		push	[ebp+var_20]
		call	_RtlStringCbCopyNW@16 ;	RtlStringCbCopyNW(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22D27
		push	esi
		push	offset ??_C@_0BO@EGIGDNGO@RtlStringCbCopyNW?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	8EAh
		jmp	short loc_A22CB6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22D27:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+11Aj
		mov	esi, [ebp+var_4]
		mov	ecx, esi
		call	_AslpPathWildcardMakeLeaves@4 ;	AslpPathWildcardMakeLeaves(x)
		test	eax, eax
		jnz	short loc_A22D49
		push	offset ??_C@_0CC@NDNNDPAJ@Failed?5to?5split?5the?5wildcard?5pa@NNGAKEGL@
		mov	esi, 0C0000039h
		push	8FCh
		jmp	loc_A22C86
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22D49:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+135j
		cmp	eax, 1
		jnz	short loc_A22DA4
		mov	edi, [ebp+arg_4]
		mov	ecx, [ebp+var_20]
		or	dword ptr [edi], 0FFFFFFFFh
		call	_AslDoesFileExistNtPath@4 ; AslDoesFileExistNtPath(x)
		test	eax, eax
		jnz	short loc_A22D6A
		mov	esi, 80000006h
		jmp	loc_A230D4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22D6A:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+160j
		mov	ecx, [ebp+var_10]
		mov	edx, 104h
		push	ebx
		call	RtlStringCchCopyW
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22D9D
		push	esi
		push	offset ??_C@_0BO@EGIGDNGO@RtlStringCbCopyNW?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	90Eh
		push	(offset	loc_8C4FB3+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A230D4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22D9D:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+17Ej
		xor	esi, esi
		jmp	loc_A230D4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22DA4:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+14Ej
		push	ecx
		push	20h
		pop	edx
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	ebx, eax
		mov	[ebp+var_14], ebx
		test	ebx, ebx
		jz	loc_A22CFE
		push	4		; size_t
		push	offset ??_C@_19JHEHLFPM@?$AA?2?$AA?$DP?$AA?$DP?$AA?2@NNGAKEGL@ ; "\\??\\"
		push	[ebp+arg_0]	; wchar_t *
		call	_wcsncmp
		add	esp, 0Ch
		lea	edi, [ebx+8]
		neg	eax
		sbb	eax, eax
		neg	eax
		mov	[ebx], eax
		xor	eax, eax
		mov	[ebx+4], esi
		xor	esi, esi
		push	6
		pop	ecx
		rep stosd
		lea	edi, [ebx+8]
		mov	[ebp+var_4], esi
		and	[edi], eax
		and	[edi+0Ch], esi
		and	[edi+8], esi
		and	[edi+14h], esi
		push	10h
		pop	eax
		mov	[edi+10h], eax
		mov	[edi+4], eax
		mov	eax, [edi+0Ch]
		cmp	eax, 8
		jb	short loc_A22E0F
		mov	esi, 80070057h
		jmp	loc_A22EF2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22E0F:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+205j
		mov	esi, [edi+10h]
		lea	ecx, [esi+7]
		cmp	ecx, 8
		jb	loc_A22EED
		and	[ebp+var_8], 0
		neg	esi
		and	[ebp+arg_0], 0
		and	esi, ecx
		mov	ecx, [edi+4]
		mul	ecx
		mov	[ebp+var_C], ecx
		lea	ecx, [ebp+var_8]
		push	edx
		push	eax
		mov	[ebp+var_18], esi
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		jns	short loc_A22E4D

loc_A22E43:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+260j
		mov	esi, 8000000Bh
		jmp	loc_A22EE7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22E4D:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+243j
		mov	eax, [ebp+var_C]
		lea	ecx, [ebp+arg_0]
		mul	esi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A22E43
		mov	eax, [edi+14h]
		mov	[ebp+var_C], eax
		push	72615452h
		push	[ebp+arg_0]
		push	1
		test	eax, eax
		jnz	short loc_A22E8F
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	short loc_A22EE2
		push	[ebp+arg_0]	; size_t
		push	0		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		jmp	short loc_A22ED1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22E8F:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+274j
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	short loc_A22EE2
		push	[ebp+arg_0]	; size_t
		push	0		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		test	esi, esi
		jz	short loc_A22EE2
		mov	eax, [ebp+var_8]
		cmp	eax, [ebp+arg_0]
		jb	short loc_A22EB7
		mov	eax, [ebp+arg_0]

loc_A22EB7:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+2B4j
		push	eax		; size_t
		push	[ebp+var_C]	; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		push	72615452h
		push	[ebp+var_C]
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A22ED1:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+28Fj
		test	esi, esi
		jz	short loc_A22EE2
		mov	eax, [ebp+var_18]
		mov	[edi+14h], esi
		xor	esi, esi
		mov	[edi+0Ch], eax
		jmp	short loc_A22EE7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22EE2:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+27Fj
					; AslPathWildcardFindFirst(x,x,x,x)+29Aj ...
		mov	esi, 8007000Eh

loc_A22EE7:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+24Aj
					; AslPathWildcardFindFirst(x,x,x,x)+2E2j
		test	esi, esi
		jnz	short loc_A22EF2
		jmp	short loc_A22F29
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22EED:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+21Aj
		mov	esi, 8000000Bh

loc_A22EF2:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+20Cj
					; AslPathWildcardFindFirst(x,x,x,x)+2EBj
		mov	eax, [edi+14h]
		test	eax, eax
		jz	short loc_A22F04
		push	72615452h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A22F04:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+2F9j
		push	6
		xor	eax, eax
		pop	ecx
		rep stosd
		test	esi, esi
		jns	short loc_A22F3D
		push	esi
		push	offset ??_C@_0BP@JCGJLENG@RtlArrayInitialize?5failed?5?$FL?$CFx?$FN@FNODOBFM@
		push	86Bh
		push	(offset	loc_5A738F+3)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A22F29:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+2EDj
		test	esi, esi
		jns	short loc_A22F3D
		push	esi
		push	(offset	loc_8C512D+1)
		push	934h
		jmp	loc_A22CB6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22F3D:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+30Fj
					; AslPathWildcardFindFirst(x,x,x,x)+32Dj
		push	dword ptr [ebx+4]
		lea	eax, [ebp+var_2C]
		push	eax
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		push	0
		push	0
		push	1
		push	dword ptr [ebx+4]
		lea	edx, [ebp+var_2C]
		lea	ecx, [ebp+var_3C]
		call	_AslpPathWildcardAllocMatchNode@24 ; AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A22F73
		push	esi
		push	(offset	loc_8C50A3+1)
		push	941h
		jmp	loc_A22CB6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22F73:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+363j
		mov	eax, [ebx+10h]
		mov	edx, [ebx+14h]
		mov	[ebp+var_1C], eax
		cmp	eax, edx
		jb	loc_A23070
		lea	ecx, [eax+1]
		cmp	ecx, edx
		ja	short loc_A22F95
		mov	esi, 80070057h
		jmp	loc_A230A7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22F95:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+38Bj
		mov	edi, [ebx+18h]
		dec	edi
		lea	eax, [edi+ecx]
		cmp	eax, ecx
		jb	loc_A230A2
		mov	esi, [ebx+0Ch]
		lea	ecx, [ebp+var_C]
		and	[ebp+var_C], 0
		not	edi
		and	[ebp+arg_0], 0
		and	edi, eax
		mov	eax, edx
		mov	[ebp+var_8], edi
		mul	esi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		jns	short loc_A22FD2

loc_A22FC8:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+3E4j
		mov	esi, 8000000Bh
		jmp	loc_A2306C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A22FD2:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+3C8j
		mov	eax, esi
		lea	ecx, [ebp+arg_0]
		mul	edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A22FC8
		mov	eax, [ebx+1Ch]
		mov	[ebp+var_18], eax
		push	72615452h
		test	eax, eax
		jnz	short loc_A23013
		push	[ebp+arg_0]
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	short loc_A23067
		push	[ebp+arg_0]	; size_t
		push	0		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		jmp	short loc_A23059
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23013:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+3F3j
		mov	edi, [ebp+arg_0]
		push	edi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	short loc_A23067
		push	edi		; size_t
		push	0		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		test	esi, esi
		jz	short loc_A23067
		mov	eax, [ebp+var_C]
		cmp	eax, edi
		jb	short loc_A2303D
		mov	eax, edi

loc_A2303D:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+43Bj
		mov	edi, [ebp+var_18]
		push	eax		; size_t
		push	edi		; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		push	72615452h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	edi, [ebp+var_8]

loc_A23059:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+413j
		test	esi, esi
		jz	short loc_A23067
		mov	[ebx+1Ch], esi
		xor	esi, esi
		mov	[ebx+14h], edi
		jmp	short loc_A2306C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23067:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+403j
					; AslPathWildcardFindFirst(x,x,x,x)+424j ...
		mov	esi, 8007000Eh

loc_A2306C:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+3CFj
					; AslPathWildcardFindFirst(x,x,x,x)+467j
		test	esi, esi
		jnz	short loc_A230A9

loc_A23070:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+380j
		mov	eax, [ebx+0Ch]
		lea	ecx, [ebp+arg_0]
		mul	[ebp+var_1C]
		and	[ebp+arg_0], 0
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A230A2
		mov	ecx, [ebx+1Ch]
		mov	edi, [ebp+arg_0]
		add	edi, ecx
		cmp	edi, ecx
		jb	short loc_A230A2
		lea	esi, [ebp+var_3C]
		movsd
		movsd
		movsd
		movsd
		inc	dword ptr [ebx+10h]
		xor	esi, esi
		jmp	short loc_A230A7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A230A2:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+3A0j
					; AslPathWildcardFindFirst(x,x,x,x)+488j ...
		mov	esi, 8000000Bh

loc_A230A7:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+392j
					; AslPathWildcardFindFirst(x,x,x,x)+4A2j
		test	esi, esi

loc_A230A9:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+470j
		jns	short loc_A230BB
		push	esi
		push	(offset	loc_8C50E5+1)
		push	947h
		jmp	loc_A22CB6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A230BB:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x):loc_A230A9j
		mov	ecx, [ebp+var_10]
		lea	edi, [ebp+var_3C]
		xor	eax, eax
		stosd
		push	ebx
		stosd
		stosd
		stosd
		mov	edi, [ebp+arg_4]
		mov	[edi], ebx
		call	_AslPathWildcardFindNext@12 ; AslPathWildcardFindNext(x,x,x)
		mov	esi, eax

loc_A230D4:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+9Aj
					; AslPathWildcardFindFirst(x,x,x,x)+167j ...
		lea	eax, [ebp+var_24]
		push	eax
		call	_RtlFreeUTF8String@4 ; RtlFreeUTF8String(x)
		mov	eax, [ebp+var_4]
		test	eax, eax
		jz	short loc_A230EF
		push	74705041h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A230EF:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+4E4j
		test	esi, esi
		jns	short loc_A23106
		lea	ecx, [ebp+var_14]
		call	_AslpPathWildcardFreeFindContext@4 ; AslpPathWildcardFreeFindContext(x)
		lea	ecx, [ebp+var_3C]
		call	_AslpPathWildcardFreeMatchNode@4 ; AslpPathWildcardFreeMatchNode(x)
		and	dword ptr [edi], 0

loc_A23106:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+4F3j
		mov	eax, esi
		jmp	short loc_A2310F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2310A:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+23j
					; AslPathWildcardFindFirst(x,x,x,x)+2Ej
		mov	eax, 0C00000F1h

loc_A2310F:				; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+19j
					; AslPathWildcardFindFirst(x,x,x,x)+40j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
_AslPathWildcardFindFirst@16 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslPathWildcardFindNext(x, x, x)
_AslPathWildcardFindNext@12 proc near	; CODE XREF: SdbpCheckMatchingWildcardFiles(x,x,x,x,x,x,x)+1A1p
					; AslPathWildcardFindFirst(x,x,x,x)+4CFp

var_3C		= dword	ptr -3Ch
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 40h
		push	ebx
		mov	ebx, [ebp+arg_0]
		mov	eax, ecx
		mov	[ebp+var_1C], eax
		push	esi
		push	edi
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_A23138
		mov	eax, 80000006h
		jmp	loc_A23294
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23138:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+16j
		test	eax, eax
		jnz	short loc_A23146
		mov	eax, 0C00000EFh
		jmp	loc_A23294
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23146:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+24j
		test	ebx, ebx
		jnz	short loc_A23154
		mov	eax, 0C00000F1h
		jmp	loc_A23294
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23154:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+32j
		xor	eax, eax
		lea	edi, [ebp+var_3C]
		mov	[ebp+var_2C], eax
		mov	edx, 268h
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_20], eax
		stosd
		push	ecx
		stosd
		stosd
		stosd
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	esi, eax
		mov	[ebp+arg_0], esi
		test	esi, esi
		jnz	short loc_A23187
		mov	esi, 0C0000017h
		jmp	loc_A23292
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23187:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+65j
		mov	eax, [ebx+10h]
		cmp	eax, 1
		jb	loc_A2327F
		mov	edx, eax

loc_A23195:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+163j
		lea	ecx, [eax-1]
		xor	eax, eax
		mov	edi, eax
		cmp	ecx, edx
		jnb	short loc_A231CA
		mov	[ebp+var_8], eax
		mov	eax, [ebx+0Ch]
		mul	ecx
		lea	ecx, [ebp+var_8]
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A231C6
		mov	ecx, [ebx+1Ch]
		mov	edi, [ebp+var_8]
		add	edi, ecx
		cmp	edi, ecx
		jb	short loc_A231C6
		xor	eax, eax
		jmp	short loc_A231CA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A231C6:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+9Ej
					; AslPathWildcardFindNext(x,x,x)+AAj
		xor	eax, eax
		mov	edi, eax

loc_A231CA:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+88j
					; AslPathWildcardFindNext(x,x,x)+AEj
		test	edi, edi
		jz	loc_A23852
		cmp	[edi+0Ch], eax
		jnz	loc_A233DC
		push	(offset	loc_8C5005+5)
		push	9CEh
		push	offset ??_C@_0BI@KNFLDNF@AslPathWildcardFindNext@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		mov	ecx, [ebx+10h]
		add	esp, 10h
		cmp	ecx, 1
		jnb	short loc_A23203

loc_A231FC:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+347j
		mov	esi, 8000001Ah
		jmp	short loc_A23254
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23203:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+E4j
		lea	edx, [ecx-1]
		xor	edi, edi
		mov	eax, edi
		cmp	edx, ecx
		jnb	short loc_A23232
		mov	eax, [ebx+0Ch]
		lea	ecx, [ebp+var_8]
		mul	edx
		mov	[ebp+var_8], edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A23230
		mov	ecx, [ebx+1Ch]
		mov	eax, [ebp+var_8]
		add	eax, ecx
		cmp	eax, ecx
		jnb	short loc_A23232

loc_A23230:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+10Cj
		mov	eax, edi

loc_A23232:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+F6j
					; AslPathWildcardFindNext(x,x,x)+118j
		test	eax, eax
		jnz	short loc_A2329B

loc_A23236:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+37Ej
		push	offset ??_C@_0CI@FJNDACIF@RtlArrayGet?5failed?5to?5get?5the?5n@FNODOBFM@
		push	826h
		push	offset ??_C@_0BJ@GPOAMCLL@AslpPathWildcardPeekNode@FNODOBFM@
		push	1
		mov	esi, 0C00000E5h
		call	AslLogCallPrintf
		add	esp, 10h

loc_A23254:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+EBj
		push	esi
		push	offset ??_C@_0CF@FHOJMFII@AslpPathWildcardPeekNode?5failed@FNODOBFM@
		push	841h
		push	offset ??_C@_0BI@JOOHLFOI@AslpPathWildcardPopNode@FNODOBFM@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A2326E:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+1ACj
					; AslPathWildcardFindNext(x,x,x)+1B8j ...
		mov	esi, [ebp+arg_0]

loc_A23271:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+194j
					; AslPathWildcardFindNext(x,x,x)+393j ...
		mov	eax, [ebx+10h]
		mov	edx, eax
		cmp	eax, 1
		jnb	loc_A23195

loc_A2327F:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+77j
		mov	esi, 80000006h

loc_A23284:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+67Dj
		mov	edi, [ebp+arg_0]

loc_A23287:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+72Ej
					; AslPathWildcardFindNext(x,x,x)+737j
		push	74705041h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A23292:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+6Cj
		mov	eax, esi

loc_A23294:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+1Dj
					; AslPathWildcardFindNext(x,x,x)+2Bj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2329B:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+11Ej
		mov	ecx, eax
		call	_AslpPathWildcardFreeMatchNode@4 ; AslpPathWildcardFreeMatchNode(x)
		mov	eax, [ebx+10h]
		lea	ecx, [eax-1]
		cmp	ecx, eax
		jnb	short loc_A23271
		mov	esi, [ebx+0Ch]
		mov	eax, esi
		mul	ecx
		lea	ecx, [ebp+var_8]
		mov	[ebp+var_8], edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A2326E
		mov	ecx, [ebx+1Ch]
		mov	eax, [ebp+var_8]
		add	eax, ecx
		cmp	eax, ecx
		jb	short loc_A2326E
		push	esi		; size_t
		add	eax, edi
		push	edi		; int
		push	eax		; void *
		call	_memset
		add	esp, 0Ch
		dec	dword ptr [ebx+10h]
		mov	edi, [ebx+10h]
		cmp	edi, 10h
		jbe	short loc_A2326E
		mov	edx, [ebx+14h]
		mov	eax, edx
		mov	esi, [ebx+0Ch]
		imul	eax, esi
		cmp	eax, 400h
		jb	loc_A2326E
		mov	ecx, edx
		shr	ecx, 2
		cmp	edi, ecx
		jnb	loc_A2326E
		xor	eax, eax
		lea	ecx, [ebp+var_C]
		mov	[ebp+var_C], eax
		mov	edi, edx
		mov	[ebp+var_8], eax
		mov	eax, edx
		mul	esi
		shr	edi, 1
		push	edx
		push	eax
		mov	[ebp+var_14], edi
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	loc_A2326E
		mov	eax, esi
		lea	ecx, [ebp+var_8]
		mul	edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	loc_A2326E
		mov	eax, [ebx+1Ch]
		mov	[ebp+var_10], eax
		push	72615452h
		test	eax, eax
		jnz	short loc_A2337A

loc_A23355:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+44Cj
		push	[ebp+var_8]
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	loc_A2326E
		push	[ebp+var_8]	; size_t
		xor	eax, eax
		push	eax		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		jmp	short loc_A233C9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2337A:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+23Dj
		mov	edi, [ebp+var_8]
		push	edi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	loc_A2326E
		push	edi		; size_t
		xor	eax, eax
		push	eax		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		test	esi, esi
		jz	loc_A2326E
		mov	eax, [ebp+var_C]
		cmp	eax, edi
		jb	short loc_A233AD
		mov	eax, edi

loc_A233AD:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+293j
		mov	edi, [ebp+var_10]
		push	eax		; size_t
		push	edi		; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		push	72615452h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	edi, [ebp+var_14]

loc_A233C9:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+262j
					; AslPathWildcardFindNext(x,x,x)+4A1j
		test	esi, esi
		jz	loc_A2326E
		mov	[ebx+1Ch], esi
		mov	[ebx+14h], edi
		jmp	loc_A2326E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A233DC:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+BFj
		push	dword ptr [edi+8]
		lea	eax, [ebp+var_24]
		push	eax
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		xor	ecx, ecx
		lea	eax, [ebp+var_24]
		push	ecx
		push	eax
		push	1
		push	3
		push	268h
		push	esi
		lea	eax, [ebp+var_2C]
		push	eax
		push	ecx
		push	ecx
		push	ecx
		push	dword ptr [edi+0Ch]
		call	_ZwQueryDirectoryFile@44 ; ZwQueryDirectoryFile(x,x,x,x,x,x,x,x,x,x,x)
		test	eax, eax
		jns	loc_A235BC
		cmp	eax, 80000006h
		jz	short loc_A23457
		cmp	eax, 0C000000Fh
		jz	short loc_A23457
		push	eax
		push	offset ??_C@_0DE@OOMHCHCG@NtQueryDirectoryFile?5failed?5to?5@NNGAKEGL@
		push	9E6h
		push	offset ??_C@_0BI@KNFLDNF@AslPathWildcardFindNext@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		push	[ebp+var_20]
		push	dword ptr [edi+4]
		push	offset ??_C@_0CA@NNDPHLIO@FilePath?3?5?8?$CFws?8?5?5Pattern?3?5?8?$CFws?8@NNGAKEGL@
		push	9E7h
		push	offset ??_C@_0BI@KNFLDNF@AslPathWildcardFindNext@NNGAKEGL@
		push	2
		call	AslLogCallPrintf
		add	esp, 18h

loc_A23457:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+2FFj
					; AslPathWildcardFindNext(x,x,x)+306j
		mov	ecx, [ebx+10h]
		cmp	ecx, 1
		jb	loc_A231FC
		lea	edx, [ecx-1]
		xor	edi, edi
		mov	eax, edi
		cmp	edx, ecx
		jnb	short loc_A23492
		mov	eax, [ebx+0Ch]
		lea	ecx, [ebp+var_C]
		mul	edx
		mov	[ebp+var_C], edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A23490
		mov	ecx, [ebx+1Ch]
		mov	eax, [ebp+var_C]
		add	eax, ecx
		cmp	eax, ecx
		jnb	short loc_A23492

loc_A23490:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+36Cj
		mov	eax, edi

loc_A23492:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+356j
					; AslPathWildcardFindNext(x,x,x)+378j
		test	eax, eax
		jz	loc_A23236
		mov	ecx, eax
		call	_AslpPathWildcardFreeMatchNode@4 ; AslpPathWildcardFreeMatchNode(x)
		mov	eax, [ebx+10h]
		lea	ecx, [eax-1]
		cmp	ecx, eax
		jnb	loc_A23271
		mov	esi, [ebx+0Ch]
		mov	eax, esi
		mul	ecx
		lea	ecx, [ebp+var_C]
		mov	[ebp+var_C], edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	loc_A2326E
		mov	ecx, [ebx+1Ch]
		mov	eax, [ebp+var_C]
		add	eax, ecx
		cmp	eax, ecx
		jb	loc_A2326E
		push	esi		; size_t
		add	eax, edi
		push	edi		; int
		push	eax		; void *
		call	_memset
		add	esp, 0Ch
		dec	dword ptr [ebx+10h]
		mov	edi, [ebx+10h]
		cmp	edi, 10h
		jbe	loc_A2326E
		mov	edx, [ebx+14h]
		mov	eax, edx
		mov	esi, [ebx+0Ch]
		imul	eax, esi
		cmp	eax, 400h
		jb	loc_A2326E
		mov	ecx, edx
		shr	ecx, 2
		cmp	edi, ecx
		jnb	loc_A2326E
		xor	eax, eax
		lea	ecx, [ebp+var_C]
		mov	[ebp+var_C], eax
		mov	edi, edx
		mov	[ebp+var_8], eax
		mov	eax, edx
		mul	esi
		shr	edi, 1
		push	edx
		push	eax
		mov	[ebp+var_10], edi
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	loc_A2326E
		mov	eax, esi
		lea	ecx, [ebp+var_8]
		mul	edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	loc_A2326E
		mov	eax, [ebx+1Ch]
		mov	[ebp+var_14], eax
		push	72615452h
		test	eax, eax
		jz	loc_A23355
		mov	edi, [ebp+var_8]
		push	edi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	loc_A2326E
		push	edi		; size_t
		xor	eax, eax
		push	eax		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		test	esi, esi
		jz	loc_A2326E
		mov	eax, [ebp+var_C]
		cmp	eax, edi
		jb	short loc_A2359B
		mov	eax, edi

loc_A2359B:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+481j
		mov	edi, [ebp+var_14]
		push	eax		; size_t
		push	edi		; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		push	72615452h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	edi, [ebp+var_10]
		jmp	loc_A233C9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A235BC:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+2F4j
		mov	eax, [esi+3Ch]
		push	2Eh
		pop	edx
		cmp	eax, 4
		jnz	short loc_A235D9
		lea	ecx, [esi+5Eh]
		cmp	[ecx], dx
		jnz	short loc_A235EE
		cmp	[esi+60h], dx
		jz	loc_A23271

loc_A235D9:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+4AFj
		lea	ecx, [esi+5Eh]
		mov	[ebp+var_C], ecx
		cmp	eax, 2
		jnz	short loc_A235EE
		cmp	[ecx], dx
		jnz	short loc_A235F1
		jmp	loc_A23271
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A235EE:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+4B7j
					; AslPathWildcardFindNext(x,x,x)+4CCj
		mov	[ebp+var_C], ecx

loc_A235F1:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+4D1j
		movzx	eax, ax
		mov	edx, edi
		push	eax
		mov	eax, [esi+38h]
		push	ecx
		shr	eax, 4
		lea	ecx, [ebp+var_3C]
		and	eax, 1
		push	eax
		push	dword ptr [edi+8]
		call	_AslpPathWildcardAllocMatchNode@24 ; AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)
		cmp	eax, 0C0000273h
		jz	loc_A237B7
		cmp	eax, 0C0000103h
		jz	loc_A23271
		cmp	eax, 0C00000BAh
		jz	loc_A23271
		test	eax, eax
		js	loc_A23798
		mov	eax, [ebx+10h]
		mov	edx, [ebx+14h]
		mov	[ebp+var_18], eax
		cmp	eax, edx
		jb	loc_A23737
		lea	ecx, [eax+1]
		cmp	ecx, edx
		ja	short loc_A23658
		mov	esi, 80070057h
		jmp	loc_A23771
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23658:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+536j
		mov	edi, [ebx+18h]
		dec	edi
		lea	eax, [edi+ecx]
		cmp	eax, ecx
		jb	loc_A2376C
		mov	esi, [ebx+0Ch]
		lea	ecx, [ebp+var_C]
		not	edi
		and	edi, eax
		xor	eax, eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], eax
		mov	eax, edx
		mul	esi
		mov	[ebp+var_10], edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		jns	short loc_A23695

loc_A2368B:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+58Fj
		mov	esi, 8000000Bh
		jmp	loc_A23733
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23695:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+573j
		mov	eax, esi
		lea	ecx, [ebp+var_8]
		mul	edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A2368B
		mov	eax, [ebx+1Ch]
		mov	[ebp+var_14], eax
		push	72615452h
		test	eax, eax
		jnz	short loc_A236D7
		push	[ebp+var_8]
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	short loc_A2372E
		push	[ebp+var_8]	; size_t
		xor	eax, eax
		push	eax		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		jmp	short loc_A2371E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A236D7:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+59Ej
		mov	edi, [ebp+var_8]
		push	edi
		push	1
		call	_ExAllocatePoolWithTag@12 ; ExAllocatePoolWithTag(x,x,x)
		mov	esi, eax
		test	esi, esi
		jz	short loc_A2372E
		push	edi		; size_t
		xor	eax, eax
		push	eax		; int
		push	esi		; void *
		call	_memset
		add	esp, 0Ch
		test	esi, esi
		jz	short loc_A2372E
		mov	eax, [ebp+var_C]
		cmp	eax, edi
		jb	short loc_A23702
		mov	eax, edi

loc_A23702:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+5E8j
		mov	edi, [ebp+var_14]
		push	eax		; size_t
		push	edi		; void *
		push	esi		; void *
		call	_memcpy
		add	esp, 0Ch
		push	72615452h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	edi, [ebp+var_10]

loc_A2371E:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+5BFj
		test	esi, esi
		jz	short loc_A2372E
		xor	eax, eax
		mov	[ebx+1Ch], esi
		mov	[ebx+14h], edi
		mov	esi, eax
		jmp	short loc_A23733
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2372E:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+5AEj
					; AslPathWildcardFindNext(x,x,x)+5D0j ...
		mov	esi, 8007000Eh

loc_A23733:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+57Aj
					; AslPathWildcardFindNext(x,x,x)+616j
		test	esi, esi
		jnz	short loc_A23773

loc_A23737:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+52Bj
		xor	eax, eax
		lea	ecx, [ebp+var_C]
		mov	[ebp+var_C], eax
		mov	eax, [ebx+0Ch]
		mul	[ebp+var_18]
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A2376C
		mov	ecx, [ebx+1Ch]
		mov	edi, [ebp+var_C]
		add	edi, ecx
		cmp	edi, ecx
		jb	short loc_A2376C
		lea	esi, [ebp+var_3C]
		movsd
		movsd
		movsd
		movsd
		inc	dword ptr [ebx+10h]
		xor	eax, eax
		mov	esi, eax
		jmp	short loc_A23771
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2376C:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+54Bj
					; AslPathWildcardFindNext(x,x,x)+638j ...
		mov	esi, 8000000Bh

loc_A23771:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+53Dj
					; AslPathWildcardFindNext(x,x,x)+654j
		test	esi, esi

loc_A23773:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+61Fj
		jns	loc_A2326E
		push	esi
		push	(offset	loc_8C50E5+1)
		push	0A18h

loc_A23784:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+6C8j
					; AslPathWildcardFindNext(x,x,x)+6F9j ...
		push	offset ??_C@_0BI@KNFLDNF@AslPathWildcardFindNext@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A23284
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23798:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+51Aj
		push	eax
		push	offset ??_C@_0CL@HJAMGFDB@AslpPathWildcardAllocMatchNode?5@NNGAKEGL@
		push	0A20h
		push	offset ??_C@_0BI@KNFLDNF@AslPathWildcardFindNext@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A23271
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A237B7:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+4FCj
		movzx	eax, word ptr [edi]
		mov	edx, 208h
		mov	ebx, [ebp+var_1C]
		mov	ecx, ebx
		push	eax
		push	dword ptr [edi+4]
		call	_RtlStringCbCopyNW@16 ;	RtlStringCbCopyNW(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A237E0
		push	esi
		push	offset ??_C@_0BO@EGIGDNGO@RtlStringCbCopyNW?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	0A30h
		jmp	short loc_A23784
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A237E0:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+6BBj
		movzx	ecx, word ptr [edi]
		mov	eax, [edi+4]
		shr	ecx, 1
		cmp	word ptr [eax+ecx*2-2],	5Ch
		jz	short loc_A23814
		push	2
		push	offset ??_C@_13FPGAJAPJ@?$AA?2@NNGAKEGL@
		mov	ecx, ebx
		call	_RtlStringCbCatNW@16 ; RtlStringCbCatNW(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A23814
		push	esi
		push	(offset	loc_8C51DD+1)
		push	0A37h
		jmp	loc_A23784
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23814:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+6D8j
					; AslPathWildcardFindNext(x,x,x)+6ECj
		mov	edi, [ebp+arg_0]
		mov	ecx, ebx
		push	dword ptr [edi+3Ch]
		push	[ebp+var_C]
		call	_RtlStringCbCatNW@16 ; RtlStringCbCatNW(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A23849
		push	esi
		push	(offset	loc_8C51DD+1)
		push	0A3Eh
		push	offset ??_C@_0BI@KNFLDNF@AslPathWildcardFindNext@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A23287
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23849:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+712j
		xor	eax, eax
		mov	esi, eax
		jmp	loc_A23287
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23852:				; CODE XREF: AslPathWildcardFindNext(x,x,x)+B6j
		push	offset ??_C@_0CI@FJNDACIF@RtlArrayGet?5failed?5to?5get?5the?5n@FNODOBFM@
		push	826h
		push	offset ??_C@_0BJ@GPOAMCLL@AslpPathWildcardPeekNode@FNODOBFM@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		mov	esi, 0C00000E5h
		push	esi
		push	(offset	loc_8C5065+1)
		push	9C9h
		jmp	loc_A23784
_AslPathWildcardFindNext@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslRegWildcardFindClose(x)
_AslRegWildcardFindClose@4 proc	near	; CODE XREF: SdbpCheckMatchingWildcardRegistryEntry(x,x,x,x,x,x,x,x,x,x)+6Dp
					; AslRegWildcardFindFirst(x,x,x)+74p
		mov	edi, edi
		push	edi
		mov	edi, ecx
		test	edi, edi
		jz	short loc_A238D4
		push	ebx
		mov	ebx, [edi]
		cmp	ebx, edi
		jz	short loc_A238B6
		push	esi

loc_A23891:				; CODE XREF: AslRegWildcardFindClose(x)+33j
		mov	eax, [ebx+10h]
		test	eax, eax
		jz	short loc_A238A2
		push	eax
		call	_ZwClose@4	; ZwClose(x)
		and	dword ptr [ebx+10h], 0

loc_A238A2:				; CODE XREF: AslRegWildcardFindClose(x)+16j
		mov	esi, [ebx]
		push	74705041h
		push	ebx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		mov	ebx, esi
		cmp	esi, edi
		jnz	short loc_A23891
		pop	esi

loc_A238B6:				; CODE XREF: AslRegWildcardFindClose(x)+Ej
		mov	eax, [edi+0Ch]
		pop	ebx
		test	eax, eax
		jz	short loc_A238C9
		push	74705041h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A238C9:				; CODE XREF: AslRegWildcardFindClose(x)+3Cj
		push	74705041h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A238D4:				; CODE XREF: AslRegWildcardFindClose(x)+7j
		pop	edi
		retn
_AslRegWildcardFindClose@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslRegWildcardFindFirst(x, x, x)
_AslRegWildcardFindFirst@12 proc near	; CODE XREF: SdbpCheckMatchingWildcardRegistryEntry(x,x,x,x,x,x,x,x,x,x)+28p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	[ebp+var_4], ecx
		push	ecx
		push	10h
		xor	edi, edi
		pop	edx
		mov	[ebx], edi
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	esi, eax
		test	esi, esi
		jnz	short loc_A238FF
		mov	eax, 0C0000017h
		jmp	short loc_A23951
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A238FF:				; CODE XREF: AslRegWildcardFindFirst(x,x,x)+20j
		mov	edx, [ebp+arg_0]
		lea	ecx, [esi+0Ch]
		mov	[esi+8], edi
		mov	[esi+0Ch], edi
		mov	[esi+4], esi
		mov	[esi], esi
		call	AslStringDuplicate
		mov	edi, eax
		test	edi, edi
		js	short loc_A23944
		mov	ecx, [esi+0Ch]
		mov	edx, esi
		call	_AslpParsePattern@8 ; AslpParsePattern(x,x)
		mov	edi, eax
		test	edi, edi
		js	short loc_A23944
		mov	eax, [esi]
		mov	edx, esi
		mov	ecx, [ebp+var_4]
		mov	[esi+8], eax
		call	_AslRegWildcardFindNext@8 ; AslRegWildcardFindNext(x,x)
		mov	edi, eax
		test	edi, edi
		js	short loc_A23944
		mov	[ebx], esi
		xor	esi, esi

loc_A23944:				; CODE XREF: AslRegWildcardFindFirst(x,x,x)+43j
					; AslRegWildcardFindFirst(x,x,x)+53j ...
		test	esi, esi
		jz	short loc_A2394F
		mov	ecx, esi
		call	_AslRegWildcardFindClose@4 ; AslRegWildcardFindClose(x)

loc_A2394F:				; CODE XREF: AslRegWildcardFindFirst(x,x,x)+70j
		mov	eax, edi

loc_A23951:				; CODE XREF: AslRegWildcardFindFirst(x,x,x)+27j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
_AslRegWildcardFindFirst@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslRegWildcardFindNext(x, x)
_AslRegWildcardFindNext@8 proc near	; CODE XREF: SdbpCheckMatchingWildcardRegistryEntry(x,x,x,x,x,x,x,x,x,x)+60p
					; AslRegWildcardFindFirst(x,x,x)+5Fp
		mov	edi, edi
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	ebx, ecx
		mov	esi, [edi+8]
		test	esi, esi
		jnz	short loc_A2398D
		mov	eax, 8000001Ah

loc_A2396D:				; CODE XREF: AslRegWildcardFindNext(x,x)+45j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23971:				; CODE XREF: AslRegWildcardFindNext(x,x)+37j
		mov	edx, edi
		mov	ecx, esi
		call	_AslpProcessMatchRegNode@8 ; AslpProcessMatchRegNode(x,x)
		mov	ecx, eax
		test	ecx, ecx
		js	short loc_A2398A
		mov	eax, [esi]
		cmp	eax, edi
		jz	short loc_A2399F
		mov	esi, eax
		jmp	short loc_A2398D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2398A:				; CODE XREF: AslRegWildcardFindNext(x,x)+26j
		mov	esi, [esi+4]

loc_A2398D:				; CODE XREF: AslRegWildcardFindNext(x,x)+Ej
					; AslRegWildcardFindNext(x,x)+30j
		cmp	esi, edi
		jnz	short loc_A23971
		mov	ecx, 8000001Ah
		xor	esi, esi

loc_A23998:				; CODE XREF: AslRegWildcardFindNext(x,x)+4Cj
		mov	[edi+8], esi
		mov	eax, ecx
		jmp	short loc_A2396D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2399F:				; CODE XREF: AslRegWildcardFindNext(x,x)+2Cj
		mov	eax, [esi+10h]
		mov	[ebx], eax
		jmp	short loc_A23998
_AslRegWildcardFindNext@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpAllocMatchNode(x, x, x)
_AslpAllocMatchNode@12 proc near	; CODE XREF: AslpParsePattern(x,x)+43p
					; AslpParsePattern(x,x)+74p

arg_0		= dword	ptr  8

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		push	ecx
		push	18h
		mov	esi, edx
		mov	edi, ecx
		pop	edx
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		test	eax, eax
		jnz	short loc_A239C5
		mov	ecx, 0C0000017h
		jmp	short loc_A239F1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A239C5:				; CODE XREF: AslpAllocMatchNode(x,x,x)+16j
		mov	edx, [ebp+arg_0]
		xor	ecx, ecx
		mov	[eax+4], eax
		mov	[eax], eax
		mov	[eax+14h], ecx
		mov	[eax+10h], ecx
		mov	[eax+0Ch], esi
		mov	[eax+8], edi
		mov	esi, [edx]
		cmp	[esi+4], edx
		jz	short loc_A239E7
		push	3
		pop	ecx
		int	29h		; DOS 2+ internal - FAST PUTCHAR
					; AL = character to display

loc_A239E7:				; CODE XREF: AslpAllocMatchNode(x,x,x)+3Aj
		mov	[eax], esi
		mov	[eax+4], edx
		mov	[esi+4], eax
		mov	[edx], eax

loc_A239F1:				; CODE XREF: AslpAllocMatchNode(x,x,x)+1Dj
		pop	edi
		mov	eax, ecx
		pop	esi
		pop	ebp
		retn	4
_AslpAllocMatchNode@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslpParsePattern(x,	x)
_AslpParsePattern@8 proc near		; CODE XREF: AslRegWildcardFindFirst(x,x,x)+4Ap
		mov	edi, edi
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	ebx, edx
		mov	esi, edi
		xor	edx, edx
		lea	ecx, [esi+2]

loc_A23A09:				; CODE XREF: AslpParsePattern(x,x)+19j
		mov	ax, [esi]
		add	esi, 2
		cmp	ax, dx
		jnz	short loc_A23A09
		sub	esi, ecx
		sar	esi, 1
		xor	al, al
		lea	edx, [edi+esi*2]
		lea	esi, [edx-2]
		jmp	short loc_A23A59
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23A22:				; CODE XREF: AslpParsePattern(x,x)+62j
		movzx	ecx, word ptr [esi]
		cmp	ecx, 2Ah
		jz	short loc_A23A54
		cmp	ecx, 3Fh
		jz	short loc_A23A54
		cmp	ecx, 5Ch
		jnz	short loc_A23A56
		test	al, al
		jz	short loc_A23A50
		push	ebx
		lea	ecx, [esi+2]
		call	_AslpAllocMatchNode@12 ; AslpAllocMatchNode(x,x,x)
		test	eax, eax
		js	short loc_A23A72
		xor	eax, eax
		mov	edx, esi
		mov	[esi], ax
		xor	al, al
		jmp	short loc_A23A56
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23A50:				; CODE XREF: AslpParsePattern(x,x)+3Dj
		mov	edx, esi
		jmp	short loc_A23A56
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23A54:				; CODE XREF: AslpParsePattern(x,x)+2Fj
					; AslpParsePattern(x,x)+34j
		mov	al, 1

loc_A23A56:				; CODE XREF: AslpParsePattern(x,x)+39j
					; AslpParsePattern(x,x)+55j ...
		sub	esi, 2

loc_A23A59:				; CODE XREF: AslpParsePattern(x,x)+27j
		cmp	esi, edi
		ja	short loc_A23A22
		test	al, al
		jnz	short loc_A23A63
		mov	edx, esi

loc_A23A63:				; CODE XREF: AslpParsePattern(x,x)+66j
		movzx	ecx, al
		neg	ecx
		push	ebx
		sbb	ecx, ecx
		and	ecx, esi
		call	_AslpAllocMatchNode@12 ; AslpAllocMatchNode(x,x,x)

loc_A23A72:				; CODE XREF: AslpParsePattern(x,x)+4Aj
		pop	edi
		pop	esi
		pop	ebx
		retn
_AslpParsePattern@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpPathWildcardAllocMatchNode(x, x, x, x, x, x)
_AslpPathWildcardAllocMatchNode@24 proc	near
					; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+35Ap
					; AslPathWildcardFindNext(x,x,x)+4F2p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_4], edx
		mov	ebx, ecx
		lea	edi, [ebp+var_24]
		push	6
		pop	ecx
		rep stosd
		mov	edi, ebx
		xor	ecx, ecx
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], ecx
		stosd
		stosd
		stosd
		stosd
		mov	eax, [ebp+arg_0]
		jmp	short loc_A23AA6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23AA3:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+36j
		add	eax, 2

loc_A23AA6:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+2Bj
		mov	[ebx+8], eax
		cmp	[eax], cx
		jnz	short loc_A23AA3
		add	eax, 2
		mov	[ebx+8], eax
		cmp	[eax], cx
		jnz	short loc_A23AD1
		mov	esi, [ebp+arg_4]
		neg	esi
		sbb	esi, esi
		and	esi, 0FFFFFE47h
		add	esi, 0C0000273h
		jmp	loc_A23C24
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23AD1:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+41j
		cmp	[ebp+arg_4], ecx
		jnz	short loc_A23AE0
		mov	esi, 0C0000103h
		jmp	loc_A23C28
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23AE0:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+5Ej
		movzx	ecx, word ptr [edx]
		lea	eax, [ebp+arg_4]
		mov	edi, [ebp+arg_C]
		mov	edx, edi
		push	eax
		mov	[ebp+arg_4], ecx
		call	_RtlUShortAdd@12 ; RtlUShortAdd(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A23B0A
		push	esi
		push	offset ??_C@_0BJ@MDGLKPJG@RtlUShortAdd?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	0B4Dh
		jmp	loc_A23C15
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23B0A:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+82j
		mov	ecx, [ebp+arg_4]
		lea	eax, [ebp+arg_4]
		push	eax
		push	4
		pop	edx
		call	_RtlUShortAdd@12 ; RtlUShortAdd(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A23B2F
		push	esi
		push	offset ??_C@_0BJ@MDGLKPJG@RtlUShortAdd?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	0B53h
		jmp	loc_A23C15
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23B2F:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+A7j
		mov	eax, [ebp+arg_4]
		xor	ecx, ecx
		push	ecx
		movzx	edx, ax
		mov	[ebx+2], ax
		mov	[ebx], cx
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	[ebx+4], eax
		test	eax, eax
		jnz	short loc_A23B55
		mov	esi, 0C0000017h
		jmp	loc_A23C28
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23B55:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+D3j
		mov	edx, [ebp+var_4]
		mov	ecx, ebx
		call	_RtlUnicodeStringCopy@8	; RtlUnicodeStringCopy(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A23B75
		push	esi
		push	(offset	loc_8C5195+1)
		push	0B62h
		jmp	loc_A23C15
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23B75:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+EDj
		movzx	ecx, word ptr [ebx]
		mov	eax, [ebx+4]
		shr	ecx, 1
		cmp	word ptr [eax+ecx*2-2],	5Ch
		jz	short loc_A23BA4
		mov	edx, offset ??_C@_13FPGAJAPJ@?$AA?2@NNGAKEGL@
		mov	ecx, ebx
		call	_RtlUnicodeStringCatString@8 ; RtlUnicodeStringCatString(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A23BA4
		push	esi
		push	offset ??_C@_0CG@LPADCGAM@RtlUnicodeStringCatString?5faile@NNGAKEGL@
		push	0B72h
		jmp	short loc_A23C15
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23BA4:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+10Dj
					; AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+11Fj
		mov	edx, [ebp+arg_8]
		test	edx, edx
		jz	short loc_A23BCE
		test	di, di
		jz	short loc_A23BCE
		movzx	eax, di
		mov	ecx, ebx
		push	eax
		call	_RtlUnicodeStringCbCatStringN@12 ; RtlUnicodeStringCbCatStringN(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A23BCE
		push	esi
		push	(offset	loc_8C5153+1)
		push	0B7Ah
		jmp	short loc_A23C15
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23BCE:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+133j
					; AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+138j ...
		xor	eax, eax
		mov	[ebp+var_24], 18h
		push	21h
		mov	[ebp+var_20], eax
		mov	[ebp+var_14], eax
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_C]
		push	1
		push	eax
		lea	eax, [ebp+var_24]
		mov	[ebp+var_18], 240h
		push	eax
		push	100001h
		lea	eax, [ebx+0Ch]
		mov	[ebp+var_1C], ebx
		push	eax
		call	_ZwOpenFile@24	; ZwOpenFile(x,x,x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A23C2F
		push	esi
		push	offset ??_C@_0BI@LPPODAJD@Failed?5to?5open?5dir?5?$FL?$CFx?$FN@NNGAKEGL@
		push	0B88h

loc_A23C15:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+8Fj
					; AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+B4j ...
		push	offset ??_C@_0BP@NAHNFMLD@AslpPathWildcardAllocMatchNode@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A23C24:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+56j
		test	esi, esi
		jns	short loc_A23C2F

loc_A23C28:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+65j
					; AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+DAj
		mov	ecx, ebx
		call	_AslpPathWildcardFreeMatchNode@4 ; AslpPathWildcardFreeMatchNode(x)

loc_A23C2F:				; CODE XREF: AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+192j
					; AslpPathWildcardAllocMatchNode(x,x,x,x,x,x)+1B0j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	10h
_AslpPathWildcardAllocMatchNode@24 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpPathWildcardFreeFindContext(x)
_AslpPathWildcardFreeFindContext@4 proc	near ; CODE XREF: AslPathWildcardFindClose(x)+1Ep
					; AslPathWildcardFindFirst(x,x,x,x)+4F8p

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, ecx
		test	ebx, ebx
		jz	loc_A23CD6
		push	esi
		mov	esi, [ebx]
		test	esi, esi
		jz	loc_A23CD5
		mov	ecx, [esi+10h]
		push	edi
		xor	edi, edi
		test	ecx, ecx
		jz	short loc_A23C97

loc_A23C5E:				; CODE XREF: AslpPathWildcardFreeFindContext(x)+5Dj
		xor	eax, eax
		cmp	edi, ecx
		jnb	short loc_A23C88
		and	[ebp+var_4], eax
		lea	ecx, [ebp+var_4]
		mov	eax, [esi+0Ch]
		mul	edi
		push	edx
		push	eax
		call	_ULongLongToULong@12 ; ULongLongToULong(x,x,x)
		test	eax, eax
		js	short loc_A23C86
		mov	ecx, [esi+1Ch]
		mov	eax, [ebp+var_4]
		add	eax, ecx
		cmp	eax, ecx
		jnb	short loc_A23C88

loc_A23C86:				; CODE XREF: AslpPathWildcardFreeFindContext(x)+40j
		xor	eax, eax

loc_A23C88:				; CODE XREF: AslpPathWildcardFreeFindContext(x)+2Aj
					; AslpPathWildcardFreeFindContext(x)+4Cj
		mov	ecx, eax
		call	_AslpPathWildcardFreeMatchNode@4 ; AslpPathWildcardFreeMatchNode(x)
		mov	ecx, [esi+10h]
		inc	edi
		cmp	edi, ecx
		jb	short loc_A23C5E

loc_A23C97:				; CODE XREF: AslpPathWildcardFreeFindContext(x)+24j
		lea	edi, [esi+8]
		mov	eax, [edi+14h]
		test	eax, eax
		jz	short loc_A23CAC
		push	72615452h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A23CAC:				; CODE XREF: AslpPathWildcardFreeFindContext(x)+67j
		push	6
		xor	eax, eax
		pop	ecx
		rep stosd
		mov	eax, [esi+4]
		mov	edi, 74705041h
		test	eax, eax
		jz	short loc_A23CCA
		push	edi
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		and	dword ptr [esi+4], 0

loc_A23CCA:				; CODE XREF: AslpPathWildcardFreeFindContext(x)+85j
		push	edi
		push	esi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		and	dword ptr [ebx], 0
		pop	edi

loc_A23CD5:				; CODE XREF: AslpPathWildcardFreeFindContext(x)+16j
		pop	esi

loc_A23CD6:				; CODE XREF: AslpPathWildcardFreeFindContext(x)+Bj
		pop	ebx
		leave
		retn
_AslpPathWildcardFreeFindContext@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslpPathWildcardFreeMatchNode(x)
_AslpPathWildcardFreeMatchNode@4 proc near
					; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+500p
					; AslPathWildcardFindNext(x,x,x)+187p ...
		mov	edi, edi
		push	esi
		mov	esi, ecx
		test	esi, esi
		jz	short loc_A23D0D
		mov	eax, [esi+0Ch]
		test	eax, eax
		jz	short loc_A23CF3
		push	eax
		call	_ZwClose@4	; ZwClose(x)
		and	dword ptr [esi+0Ch], 0

loc_A23CF3:				; CODE XREF: AslpPathWildcardFreeMatchNode(x)+Ej
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_A23D09
		push	74705041h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)
		and	dword ptr [esi+4], 0

loc_A23D09:				; CODE XREF: AslpPathWildcardFreeMatchNode(x)+1Fj
		and	dword ptr [esi+8], 0

loc_A23D0D:				; CODE XREF: AslpPathWildcardFreeMatchNode(x)+7j
		pop	esi
		retn
_AslpPathWildcardFreeMatchNode@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpPathWildcardMakeLeaves(x)
_AslpPathWildcardMakeLeaves@4 proc near	; CODE XREF: AslPathWildcardFindFirst(x,x,x,x)+12Ep

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		test	edi, edi
		jz	loc_A23E87
		xor	ebx, ebx
		cmp	[edi], bx
		jz	loc_A23E87
		push	edi
		lea	eax, [ebp+var_8]
		mov	[ebp+var_8], ebx
		push	eax
		mov	[ebp+var_4], ebx
		call	_RtlInitUnicodeString@8	; RtlInitUnicodeString(x,x)
		mov	ecx, [ebp+var_8]
		push	2
		pop	eax
		cmp	cx, ax
		jb	loc_A23E69
		mov	eax, [ebp+var_4]
		cmp	[eax], bx
		jz	loc_A23E69
		shr	cx, 1
		movzx	esi, cx
		push	8
		pop	ecx
		cmp	si, cx
		jb	short loc_A23D81
		push	ecx		; size_t
		push	(offset	loc_5A7307+1) ;	wchar_t	*
		push	eax		; wchar_t *
		call	__wcsnicmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_A23D7E
		push	0FFFFFFFCh
		jmp	short loc_A23DEC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23D7E:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+69j
		mov	eax, [ebp+var_4]

loc_A23D81:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+56j
		push	4
		pop	ecx
		cmp	si, cx
		jb	short loc_A23DCF
		push	ecx		; size_t
		push	offset ??_C@_19JHEHLFPM@?$AA?2?$AA?$DP?$AA?$DP?$AA?2@FNODOBFM@ ; wchar_t *
		push	eax		; wchar_t *
		call	_wcsncmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_A23DA0
		push	0FFFFFFFEh
		jmp	short loc_A23DEC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23DA0:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+8Bj
		push	4		; size_t
		push	(offset	loc_5A72FD+1) ;	wchar_t	*
		push	[ebp+var_4]	; wchar_t *
		call	_wcsncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A23DEA
		push	4		; size_t
		push	(offset	loc_5A7319+1) ;	wchar_t	*
		push	[ebp+var_4]	; wchar_t *
		call	_wcsncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A23DEA
		mov	eax, [ebp+var_4]

loc_A23DCF:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+78j
		push	2
		pop	ecx
		cmp	si, cx
		jbe	short loc_A23DEF
		push	ecx		; size_t
		push	(offset	loc_5A7323+1) ;	wchar_t	*
		push	eax		; wchar_t *
		call	_wcsncmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_A23DEF

loc_A23DEA:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+A5j
					; AslpPathWildcardMakeLeaves(x)+BBj
		push	0FFFFFFFDh

loc_A23DEC:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+6Dj
					; AslpPathWildcardMakeLeaves(x)+8Fj
		pop	esi
		jmp	short loc_A23DF1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23DEF:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+C6j
					; AslpPathWildcardMakeLeaves(x)+D9j
		mov	esi, ebx

loc_A23DF1:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+DEj
		movzx	eax, word ptr [edi]
		mov	ecx, edi
		test	ax, ax
		jz	short loc_A23E1E
		push	5Ch
		mov	edx, eax
		pop	ebx

loc_A23E00:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+10Bj
		cmp	dx, bx
		jnz	short loc_A23E0F
		test	esi, esi
		js	short loc_A23E0E
		xor	eax, eax
		mov	[ecx], ax

loc_A23E0E:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+F8j
		inc	esi

loc_A23E0F:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+F4j
		add	ecx, 2
		movzx	eax, word ptr [ecx]
		mov	edx, eax
		test	ax, ax
		jnz	short loc_A23E00
		xor	ebx, ebx

loc_A23E1E:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+EAj
		xor	eax, eax
		mov	[ecx+2], ax
		movzx	eax, word ptr [edi]
		test	ax, ax
		jz	short loc_A23E60

loc_A23E2C:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+14Fj
		test	ax, ax
		jz	short loc_A23E39

loc_A23E31:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+128j
		add	edi, 2
		cmp	[edi], bx
		jnz	short loc_A23E31

loc_A23E39:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+120j
		lea	ebx, [edi+2]
		xor	eax, eax
		cmp	[ebx], ax
		jz	short loc_A23E60
		mov	ecx, ebx
		call	_AslStringHasWildcard@4	; AslStringHasWildcard(x)
		test	eax, eax
		jnz	short loc_A23E60
		push	5Ch
		pop	edx
		xor	ecx, ecx
		mov	[edi], dx
		dec	esi
		mov	eax, edx
		cmp	[ebx], cx
		push	ecx
		pop	ebx
		jnz	short loc_A23E2C

loc_A23E60:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+11Bj
					; AslpPathWildcardMakeLeaves(x)+132j ...
		add	esi, 1
		js	short loc_A23E87
		mov	eax, esi
		jmp	short loc_A23E89
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23E69:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+38j
					; AslpPathWildcardMakeLeaves(x)+44j
		push	0C00000F2h
		push	(offset	loc_8C4ECB+1)
		push	0BE5h
		push	offset ??_C@_0BL@DFNMDNKJ@AslpPathWildcardMakeLeaves@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A23E87:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+Ej
					; AslpPathWildcardMakeLeaves(x)+19j ...
		xor	eax, eax

loc_A23E89:				; CODE XREF: AslpPathWildcardMakeLeaves(x)+158j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpPathWildcardMakeLeaves@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpProcessMatchRegNode(x, x)
_AslpProcessMatchRegNode@8 proc	near	; CODE XREF: AslRegWildcardFindNext(x,x)+1Dp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		mov	ebx, ecx
		push	esi
		push	edi
		cmp	[ebx+4], edx
		jnz	short loc_A23ED5
		lea	esi, [ebx+10h]
		mov	eax, [esi]
		test	eax, eax
		jnz	short loc_A23EC2
		mov	edx, [ebx+0Ch]
		push	ecx
		push	1
		push	20019h
		mov	ecx, esi
		call	AslRegistryGetKey
		mov	esi, eax
		jmp	loc_A23FBA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23EC2:				; CODE XREF: AslpProcessMatchRegNode(x,x)+19j
		push	eax
		call	_ZwClose@4	; ZwClose(x)
		and	dword ptr [esi], 0
		mov	esi, 8000001Ah
		jmp	loc_A23FBA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23ED5:				; CODE XREF: AslpProcessMatchRegNode(x,x)+10j
		mov	ecx, [ebx+0Ch]
		xor	eax, eax
		mov	word ptr [ebp+var_C], ax
		xor	esi, esi
		lea	edx, [ecx+2]

loc_A23EE3:				; CODE XREF: AslpProcessMatchRegNode(x,x)+5Ej
		mov	ax, [ecx]
		add	ecx, 2
		cmp	ax, si
		jnz	short loc_A23EE3
		sub	ecx, edx
		sar	ecx, 1
		push	ecx
		lea	eax, ds:20Ah[ecx*2]
		movzx	edx, ax
		mov	word ptr [ebp+var_C+2],	ax
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	ecx, [ebx+4]
		mov	edi, eax
		mov	[ebp+var_8], edi
		mov	eax, [ecx+10h]
		mov	[ebp+var_4], eax

loc_A23F14:				; CODE XREF: AslpProcessMatchRegNode(x,x)+BFj
					; AslpProcessMatchRegNode(x,x)+113j
		xor	ecx, ecx
		mov	[edi], cx
		mov	ecx, edi
		push	dword ptr [ebx+14h]
		push	eax
		call	_AslRegistryEnumKey@16 ; AslRegistryEnumKey(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A23FA6
		mov	eax, [ebx+0Ch]
		xor	ecx, ecx
		inc	dword ptr [ebx+14h]
		mov	edx, edi
		movzx	esi, word ptr [eax]
		mov	[eax], cx
		mov	ecx, [ebx+8]
		call	AslStringPatternMatchW
		mov	ecx, [ebx+0Ch]
		test	eax, eax
		mov	eax, [ebp+var_4]
		mov	[ecx], si
		jz	short loc_A23F14
		lea	ecx, [edi+2]
		xor	edx, edx

loc_A23F54:				; CODE XREF: AslpProcessMatchRegNode(x,x)+CFj
		mov	ax, [edi]
		add	edi, 2
		cmp	ax, dx
		jnz	short loc_A23F54
		push	dword ptr [ebx+0Ch] ; void *
		sub	edi, ecx
		sar	edi, 1
		lea	eax, [edi+edi]
		mov	word ptr [ebp+var_C], ax
		lea	eax, [ebp+var_C]
		push	eax		; int
		call	_RtlAppendUnicodeToString@8 ; RtlAppendUnicodeToString(x,x)
		lea	esi, [ebx+10h]
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_A23F89
		push	eax
		call	_ZwClose@4	; ZwClose(x)
		xor	eax, eax
		mov	[esi], eax

loc_A23F89:				; CODE XREF: AslpProcessMatchRegNode(x,x)+EFj
		mov	edi, [ebp+var_8]
		mov	edx, [ebp+var_4]
		push	ecx
		push	edi
		mov	ecx, esi
		call	_AslRegistryOpenSubKey@16 ; AslRegistryOpenSubKey(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A23FAB
		mov	eax, [ebp+var_4]
		jmp	loc_A23F14
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A23FA6:				; CODE XREF: AslpProcessMatchRegNode(x,x)+9Aj
		xor	eax, eax
		mov	[ebx+14h], eax

loc_A23FAB:				; CODE XREF: AslpProcessMatchRegNode(x,x)+10Ej
		test	edi, edi
		jz	short loc_A23FBA
		push	74705041h
		push	edi
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A23FBA:				; CODE XREF: AslpProcessMatchRegNode(x,x)+2Fj
					; AslpProcessMatchRegNode(x,x)+42j ...
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
_AslpProcessMatchRegNode@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslEnvGetSysNativeDirPathForGuestBuf(x, x, x, x, x)
_AslEnvGetSysNativeDirPathForGuestBuf@20 proc near
					; CODE XREF: SdbpGetPathAppraiser(x,x,x,x)+E5p

var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 88h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		xor	eax, eax
		push	80h		; size_t
		push	eax		; int
		lea	eax, [ebp+var_84]
		mov	esi, edx
		push	eax		; void *
		mov	[ebp+var_88], esi
		mov	ebx, ecx
		call	_memset
		mov	ecx, [ebp+arg_4]
		xor	eax, eax
		mov	[ebx], ax
		add	esp, 0Ch
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jz	loc_A240A9
		cmp	[eax], cx
		jz	loc_A240A9
		push	offset ??_C@_1BG@LEIPKKKH@?$AA?2?$AAS?$AAy?$AAs?$AAN?$AAa?$AAt?$AAi?$AAv?$AAe@NNGAKEGL@	; int
		push	40h
		pop	edx
		lea	ecx, [ebp+var_84] ; void *
		call	_AslPathToSystemPathBuf@12 ; AslPathToSystemPathBuf(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A2403F
		push	esi
		push	offset ??_C@_0CD@JEFPKOCA@AslPathToSystemPathBuf?5failed?5?$FL@NNGAKEGL@
		push	696h
		jmp	short loc_A24096
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2403F:				; CODE XREF: AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+6Fj
		test	edi, edi
		jz	short loc_A24071
		xor	eax, eax
		cmp	[edi], ax
		jz	short loc_A24071
		push	[ebp+var_88]
		mov	edx, edi
		lea	ecx, [ebp+var_84]
		push	ebx
		call	_AslPathCombine@16 ; AslPathCombine(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A240A5
		push	esi
		push	offset ??_C@_0BL@IPDIPDIN@AslPathCombine?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	6A0h
		jmp	short loc_A24096
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24071:				; CODE XREF: AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+80j
					; AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+87j
		mov	edx, [ebp+var_88]
		lea	eax, [ebp+var_84]
		push	eax
		mov	ecx, ebx
		call	RtlStringCchCopyW
		mov	esi, eax
		test	esi, esi
		jns	short loc_A240A5
		push	esi
		push	offset ??_C@_0BO@LFCDCAJH@RtlStringCchCopyW?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	6A8h

loc_A24096:				; CODE XREF: AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+7Cj
					; AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+AEj
		push	(offset	loc_8C54C4+4)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A240A5:				; CODE XREF: AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+A1j
					; AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+C8j
		mov	eax, esi
		jmp	short loc_A240B5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A240A9:				; CODE XREF: AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+49j
					; AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+52j
		push	eax
		push	ecx
		push	edi
		mov	edx, esi
		mov	ecx, ebx
		call	_AslEnvGetSystem32DirPathBuf@20	; AslEnvGetSystem32DirPathBuf(x,x,x,x,x)

loc_A240B5:				; CODE XREF: AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+E6j
		mov	ecx, [ebp+var_4]
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	0Ch
_AslEnvGetSysNativeDirPathForGuestBuf@20 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslEnvGetSystem32DirPathBuf(x, x, x, x, x)
_AslEnvGetSystem32DirPathBuf@20	proc near ; CODE XREF: SdbpGetPathSystem(x,x,x,x)+41p
					; AslEnvGetSysNativeDirPathForGuestBuf(x,x,x,x,x)+EFp

var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= word ptr  0Ch
arg_8		= dword	ptr  10h

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 88h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		lea	eax, [ebp+var_84]
		push	80h		; size_t
		xor	esi, esi
		mov	[ebp+var_88], edx
		push	esi		; int
		push	eax		; void *
		mov	ebx, ecx
		call	_memset
		mov	dx, [ebp+arg_4]
		xor	eax, eax
		mov	[ebx], ax
		add	esp, 0Ch
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jz	short loc_A24115
		movzx	ecx, word ptr [eax]
		jmp	short loc_A24118
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24115:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+48j
		movzx	ecx, dx

loc_A24118:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+4Dj
		mov	eax, esi

loc_A2411A:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+6Cj
		cmp	word_6B3470[eax*8], dx
		jnz	short loc_A2412E
		cmp	word_6B3472[eax*8], cx
		jz	short loc_A2414C

loc_A2412E:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+5Cj
		inc	eax
		cmp	eax, 7
		jb	short loc_A2411A
		mov	esi, 0C00000BBh

loc_A24139:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+BBj
					; AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+11Aj
		mov	ecx, [ebp+var_4]
		mov	eax, esi
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn	0Ch
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2414C:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+66j
		push	off_6B3474[eax*8] ; int
		lea	ecx, [ebp+var_84] ; void *
		push	40h
		pop	edx
		call	_AslPathToSystemPathBuf@12 ; AslPathToSystemPathBuf(x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24183
		push	esi
		push	offset ??_C@_0CD@JEFPKOCA@AslPathToSystemPathBuf?5failed?5?$FL@NNGAKEGL@
		push	586h

loc_A24172:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+EDj
					; AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+114j
		push	offset ??_C@_0BM@NMMIKIII@AslEnvGetSystem32DirPathBuf@NNGAKEGL@	; "AslEnvGetSystem32DirPathBuf"
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A24139
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24183:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+9Fj
		test	edi, edi
		jz	short loc_A241B5
		xor	eax, eax
		cmp	[edi], ax
		jz	short loc_A241B5
		push	[ebp+var_88]
		mov	edx, edi
		lea	ecx, [ebp+var_84]
		push	ebx
		call	_AslPathCombine@16 ; AslPathCombine(x,x,x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A241DC
		push	esi
		push	offset ??_C@_0BL@IPDIPDIN@AslPathCombine?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	590h
		jmp	short loc_A24172
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A241B5:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+BFj
					; AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+C6j
		mov	edx, [ebp+var_88]
		lea	eax, [ebp+var_84]
		push	eax
		mov	ecx, ebx
		call	RtlStringCchCopyW
		mov	esi, eax
		test	esi, esi
		jns	short loc_A241DC
		push	esi
		push	offset ??_C@_0BO@LFCDCAJH@RtlStringCchCopyW?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	598h
		jmp	short loc_A24172
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A241DC:				; CODE XREF: AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+E0j
					; AslEnvGetSystem32DirPathBuf(x,x,x,x,x)+107j
		xor	eax, eax
		mov	esi, eax
		jmp	loc_A24139
_AslEnvGetSystem32DirPathBuf@20	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslEnvVerifyGuestProcessorSupport(x, x)
_AslEnvVerifyGuestProcessorSupport@8 proc near
					; CODE XREF: SdbGuestTargetPlatformFlagsToRuntimePlatformFlags(x)+4Fp

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	esi
		push	edi
		mov	di, dx
		test	ecx, ecx
		jz	short loc_A241FD
		movzx	ecx, word ptr [ecx]
		jmp	short loc_A2422F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A241FD:				; CODE XREF: AslEnvVerifyGuestProcessorSupport(x,x)+11j
		sub	esp, 0Ch
		lea	ecx, [ebp+var_4]
		xor	edx, edx
		call	AslEnvGetProcessWowInfo
		mov	esi, eax
		test	esi, esi
		jns	short loc_A2422C
		push	esi
		push	offset ??_C@_0CE@JCOOOONA@AslEnvGetProcessWowInfo?5failed?5@NNGAKEGL@
		push	74Bh
		push	offset ??_C@_0CC@BMJNLKJB@AslEnvVerifyGuestProcessorSuppo@NNGAKEGL@ ; "AslEnvVerifyGuestProcessorSupport"
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A24250
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2422C:				; CODE XREF: AslEnvVerifyGuestProcessorSupport(x,x)+29j
		mov	ecx, [ebp+var_4]

loc_A2422F:				; CODE XREF: AslEnvVerifyGuestProcessorSupport(x,x)+16j
		xor	eax, eax

loc_A24231:				; CODE XREF: AslEnvVerifyGuestProcessorSupport(x,x)+64j
		cmp	word_6B3470[eax], cx
		jnz	short loc_A24243
		cmp	word_6B3472[eax], di
		jz	short loc_A24256

loc_A24243:				; CODE XREF: AslEnvVerifyGuestProcessorSupport(x,x)+53j
		add	eax, 8
		cmp	eax, 38h
		jb	short loc_A24231
		mov	esi, 0C00000BBh

loc_A24250:				; CODE XREF: AslEnvVerifyGuestProcessorSupport(x,x)+45j
					; AslEnvVerifyGuestProcessorSupport(x,x)+73j
		pop	edi
		mov	eax, esi
		pop	esi
		leave
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24256:				; CODE XREF: AslEnvVerifyGuestProcessorSupport(x,x)+5Cj
		xor	esi, esi
		jmp	short loc_A24250
_AslEnvVerifyGuestProcessorSupport@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslFileAllocAndGetAttributes(x, x, x, x)
_AslFileAllocAndGetAttributes@16 proc near
					; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+132p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, [ebp+arg_0]
		and	[ebp+var_8], 0
		or	eax, [ebp+arg_4]
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	edi, ecx
		jz	short loc_A242DF
		xor	esi, esi
		inc	esi
		cmp	[ebx+28h], esi
		jnz	short loc_A242EA
		push	2
		pop	edx
		push	4
		xor	ecx, ecx
		pop	ebx

loc_A24285:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+83j
		imul	eax, ecx, 18h
		test	ecx, ecx
		jz	short loc_A242C7
		cmp	ecx, 11h
		jz	short loc_A242B1
		cmp	ecx, 1Ch
		jz	short loc_A2429C
		or	[eax+edi+10h], edx
		jmp	short loc_A242D9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2429C:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+3Aj
		and	dword ptr [edi+2ACh], 0
		or	[edi+2B0h], esi
		mov	[edi+2A8h], esi
		jmp	short loc_A242D2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A242B1:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+35j
		and	dword ptr [edi+1A0h], 0
		and	dword ptr [edi+1A4h], 0
		or	[edi+1A8h], esi
		jmp	short loc_A242D2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A242C7:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+30j
		and	dword ptr [edi+8], 0
		and	dword ptr [edi+0Ch], 0
		or	[edi+10h], esi

loc_A242D2:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+55j
					; AslFileAllocAndGetAttributes(x,x,x,x)+6Bj
		mov	[eax+edi], edx
		mov	[eax+edi+4], ebx

loc_A242D9:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+40j
		inc	ecx
		cmp	ecx, 23h
		jl	short loc_A24285

loc_A242DF:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+19j
					; AslFileAllocAndGetAttributes(x,x,x,x)+2D7j
		xor	esi, esi

loc_A242E1:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+FEj
					; AslFileAllocAndGetAttributes(x,x,x,x)+309j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn	8
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A242EA:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+21j
		cmp	dword ptr [ebx+30h], 0
		jz	short loc_A24318
		push	23h
		or	edx, 0FFFFFFFFh
		lea	ecx, [edi+10h]
		pop	esi

loc_A242F9:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+BCj
		cmp	edx, 21h
		ja	short loc_A2430C
		movzx	eax, ds:byte_A24576[edx]
		jmp	ds:off_A2456A[eax*4]

loc_A2430C:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+A2j
					; DATA XREF: PAGE:00A2456Eo ...
		or	dword ptr [ecx], 2

loc_A2430F:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+ABj
					; DATA XREF: PAGE:off_A2456Ao
		inc	edx
		add	ecx, 18h
		sub	esi, 1
		jnz	short loc_A242F9

loc_A24318:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+94j
		mov	ecx, ebx
		call	_AslFileMappingEnsure@4	; AslFileMappingEnsure(x)
		mov	esi, eax
		cmp	esi, 0C0000017h
		jnz	short loc_A2435A
		cmp	dword ptr [ebx+30h], 0
		jnz	short loc_A2435E
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileLargeEnsureLargeFileMapping@8 ; AslpFileLargeEnsureLargeFileMapping(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A2436B
		push	esi
		push	offset ??_C@_0DA@KDDLGLDA@AslpFileLargeEnsureLargeFileMap@NNGAKEGL@
		push	2A2h

loc_A24349:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+10Fj
					; AslFileAllocAndGetAttributes(x,x,x,x)+174j ...
		push	(offset	loc_8C5651+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A242E1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2435A:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+CDj
		test	esi, esi
		jns	short loc_A2436B

loc_A2435E:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+D3j
		push	esi
		push	offset ??_C@_0CB@GHEHFDAF@AslFileMappingEnsure?5failed?5?$FL?$CFx@NNGAKEGL@
		push	2A6h
		jmp	short loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2436B:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+E2j
					; AslFileAllocAndGetAttributes(x,x,x,x)+102j
		xor	esi, esi
		mov	[ebp+var_4], esi

loc_A24370:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+2DFj
		mov	eax, [ebp+arg_0]
		mov	ecx, esi
		mov	edx, [ebp+arg_4]
		call	__aullshr
		and	eax, 1
		xor	edx, edx
		or	eax, edx
		jz	loc_A24527
		imul	eax, esi, 18h
		test	byte ptr [eax+edi+10h],	3
		jnz	loc_A24527
		cmp	esi, 21h
		ja	loc_A2455E
		movzx	eax, ds:byte_A245C2[esi]
		jmp	ds:off_A2459A[eax*4]

loc_A243AF:				; DATA XREF: PAGE:off_A2459Ao
		lea	edx, [ebx+8]
		mov	ecx, edi
		call	_AslpFileGetSizeAttributes@8 ; AslpFileGetSizeAttributes(x,x)
		mov	esi, eax
		test	esi, esi
		jns	loc_A24527
		push	esi
		push	offset ??_C@_0CG@NCLAMMOD@AslpFileGetSizeAttributes?5faile@NNGAKEGL@
		push	2CDh
		jmp	loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A243D3:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Ej
					; DATA XREF: PAGE:00A245A6o
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileGetVersionAttributes@8	; AslpFileGetVersionAttributes(x,x)
		mov	ecx, eax
		test	ecx, ecx
		jns	loc_A24527
		call	_AslFileResourceNotFound@4 ; AslFileResourceNotFound(x)
		test	eax, eax
		jnz	loc_A24527
		push	ecx
		push	(offset	loc_8C55F7+1)
		push	2E5h
		push	(offset	loc_8C5651+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A24527
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24412:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Ej
					; DATA XREF: PAGE:00A245AAo
		mov	edx, ebx
		lea	ecx, [ebp+var_8]
		call	_AslpFileGetModuleType@8 ; AslpFileGetModuleType(x,x)
		mov	esi, eax
		test	esi, esi
		js	loc_A2453E
		mov	eax, [ebp+var_8]
		and	dword ptr [edi+1A4h], 0
		or	dword ptr [edi+1A8h], 1
		mov	dword ptr [edi+198h], 2
		mov	dword ptr [edi+19Ch], 4
		mov	[edi+1A0h], eax
		jmp	loc_A24527
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24456:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Ej
					; DATA XREF: PAGE:00A245BEo
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileGetFileKindDetailAttribute@8 ;	AslpFileGetFileKindDetailAttribute(x,x)
		mov	esi, eax
		test	esi, esi
		jns	loc_A24527
		push	esi
		push	offset ??_C@_0CP@DAOJOCEB@AslpFileGetFileKindDetailAttrib@NNGAKEGL@
		push	301h
		jmp	loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24479:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Ej
					; DATA XREF: PAGE:00A2459Eo
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileGetHeaderAttributesPE@8 ; AslpFileGetHeaderAttributesPE(x,x)
		mov	esi, eax
		test	esi, esi
		jns	loc_A24527
		push	esi
		push	(offset	loc_8C56EF+1)
		push	311h
		jmp	loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2449C:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Ej
					; DATA XREF: PAGE:00A245B2o
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileGetPeExportNameExeWrapper@8 ; AslpFileGetPeExportNameExeWrapper(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24527
		push	esi
		push	(offset	loc_8C5719+1)
		push	326h
		jmp	loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A244BB:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Ej
					; DATA XREF: PAGE:00A245B6o
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileGetPeExportNameExeWrapper@8 ; AslpFileGetPeExportNameExeWrapper(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24527
		push	esi
		push	(offset	loc_8C5719+1)
		push	33Ch
		jmp	loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A244DA:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Ej
					; DATA XREF: PAGE:00A245BAo
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileGetClrVersionAttribute@8 ; AslpFileGetClrVersionAttribute(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24527
		push	esi
		push	(offset	loc_8C5699+1)
		push	346h
		jmp	loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A244F9:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Ej
					; DATA XREF: PAGE:00A245AEo
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileGetHeaderAttributesNE@8 ; AslpFileGetHeaderAttributesNE(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24527
		push	esi
		push	offset ??_C@_0CK@JGKPMHMO@AslpFileGetHeaderAttributesNE?5f@NNGAKEGL@
		push	350h
		jmp	loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24518:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Ej
					; DATA XREF: PAGE:00A245A2o
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileGetChecksumAttributes@8 ; AslpFileGetChecksumAttributes(x,x)
		mov	esi, eax
		test	esi, esi
		js	short loc_A2454E

loc_A24527:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+12Aj
					; AslFileAllocAndGetAttributes(x,x,x,x)+138j ...
		mov	eax, [ebp+var_4]
		inc	eax
		mov	[ebp+var_4], eax
		cmp	eax, 23h
		jge	loc_A242DF
		mov	esi, eax
		jmp	loc_A24370
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2453E:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+1C6j
		push	esi
		push	offset ??_C@_0CC@BEMDKDC@AslpFileGetModuleType?5failed?5?$FL?$CF@NNGAKEGL@ ; "AslpFileGetModuleType failed [%x]"
		push	2F2h
		jmp	loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2454E:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+2CBj
		push	esi
		push	offset ??_C@_0CK@CHCIOBLK@AslpFileGetChecksumAttributes?5f@NNGAKEGL@
		push	35Ah
		jmp	loc_A24349
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2455E:				; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+141j
		mov	esi, 0C00000E5h
		jmp	loc_A242E1
_AslFileAllocAndGetAttributes@16 endp

; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		db 8Bh,	0FFh
off_A2456A	dd offset loc_A2430F	; DATA XREF: AslFileAllocAndGetAttributes(x,x,x,x)+ABr
		dd offset loc_A2430C
		dd offset loc_A2430C
byte_A24576	db 0			; DATA XREF: AslFileAllocAndGetAttributes(x,x,x,x)+A4r
		db 2
		dd 3 dup(1010101h), 101h, 20200h, 2020101h, 2, 1010200h
		db 8Bh,	0FFh
off_A2459A	dd offset loc_A243AF	; DATA XREF: AslFileAllocAndGetAttributes(x,x,x,x)+14Er
		dd offset loc_A24479
		dd offset loc_A24518
		dd offset loc_A243D3
		dd offset loc_A24412
		dd offset loc_A244F9
		dd offset loc_A2449C
		dd offset loc_A244BB
		dd offset loc_A244DA
		dd offset loc_A24456
byte_A245C2	db 0			; DATA XREF: AslFileAllocAndGetAttributes(x,x,x,x)+147r
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
		add	[edx], eax
		add	eax, [ebx]
		add	eax, [ebx]
		add	eax, [ebx]
		add	eax, [ebx]
		add	eax, [ebx]
		add	eax, [ebx]
		add	eax, [ebx]
		add	al, 1
		add	ds:3060105h, eax
		pop	es
		add	cl, [eax]
		or	[ecx], eax
		add	[ecx], eax
		add	[ecx], al

; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslFileFreeAttributes(x)
_AslFileFreeAttributes@4 proc near	; CODE XREF: SdbpCheckAllAttributes(x,x,x,x,x)+1B8p
		mov	edi, edi
		push	edi
		mov	edi, ecx
		test	edi, edi
		jz	short loc_A24630
		push	ebx
		push	esi
		push	23h
		lea	esi, [edi+8]
		pop	ebx

loc_A245F5:				; CODE XREF: AslFileFreeAttributes(x)+39j
		mov	eax, [esi+8]
		test	al, 1
		jz	short loc_A24617
		cmp	dword ptr [esi-8], 4
		jnz	short loc_A24617
		test	al, 4
		jz	short loc_A24617
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_A24617
		push	74705041h
		push	eax
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A24617:				; CODE XREF: AslFileFreeAttributes(x)+16j
					; AslFileFreeAttributes(x)+1Cj	...
		add	esi, 18h
		sub	ebx, 1
		jnz	short loc_A245F5
		push	348h		; size_t
		push	ebx		; int
		push	edi		; void *
		call	_memset
		add	esp, 0Ch
		pop	esi
		pop	ebx

loc_A24630:				; CODE XREF: AslFileFreeAttributes(x)+7j
		pop	edi
		retn
_AslFileFreeAttributes@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGet16BitDescription(x, x)
_AslpFileGet16BitDescription@8 proc near ; CODE	XREF: AslpFileGetHeaderAttributesNE(x,x)+A1p

var_104		= dword	ptr -104h
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 104h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	esi
		mov	esi, edx
		push	edi
		mov	edi, ecx
		cmp	dword ptr [esi+28h], 5
		jz	short loc_A2465D
		and	dword ptr [edi], 0
		mov	eax, 0C00000BBh
		jmp	short loc_A246C2
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2465D:				; CODE XREF: AslpFileGet16BitDescription(x,x)+1Fj
		push	100h		; size_t
		lea	eax, [ebp+var_104]
		push	0		; int
		push	eax		; void *
		call	_memset
		add	esp, 0Ch
		lea	ecx, [ebp+var_104]
		mov	edx, esi
		call	_AslpFileQuery16BitDescription@8 ; AslpFileQuery16BitDescription(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24693
		push	esi
		push	offset ??_C@_0CK@NDCMLJOK@AslpFileQuery16BitDescription?5f@NNGAKEGL@
		push	11C9h
		jmp	short loc_A246B1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24693:				; CODE XREF: AslpFileGet16BitDescription(x,x)+52j
		lea	edx, [ebp+var_104]
		mov	ecx, edi
		call	_AslStringAnsiToUnicode@8 ; AslStringAnsiToUnicode(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A246C0
		push	esi
		push	offset ??_C@_0CD@HDIACEIF@AslStringAnsiToUnicode?5failed?5?$FL@NNGAKEGL@
		push	11CFh

loc_A246B1:				; CODE XREF: AslpFileGet16BitDescription(x,x)+5Fj
		push	(offset	loc_8C609F+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A246C0:				; CODE XREF: AslpFileGet16BitDescription(x,x)+72j
		mov	eax, esi

loc_A246C2:				; CODE XREF: AslpFileGet16BitDescription(x,x)+29j
		mov	ecx, [ebp+var_4]
		pop	edi
		xor	ecx, ebp
		pop	esi
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn
_AslpFileGet16BitDescription@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGet16BitModuleName(x, x)
_AslpFileGet16BitModuleName@8 proc near	; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+115p

var_104		= dword	ptr -104h
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 104h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	esi
		mov	esi, edx
		push	edi
		mov	edi, ecx
		cmp	dword ptr [esi+28h], 5
		jz	short loc_A246FB
		and	dword ptr [edi], 0
		mov	eax, 0C00000BBh
		jmp	short loc_A24760
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A246FB:				; CODE XREF: AslpFileGet16BitModuleName(x,x)+1Fj
		push	100h		; size_t
		lea	eax, [ebp+var_104]
		push	0		; int
		push	eax		; void *
		call	_memset
		add	esp, 0Ch
		lea	ecx, [ebp+var_104]
		mov	edx, esi
		call	_AslpFileQuery16BitModuleName@8	; AslpFileQuery16BitModuleName(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24731
		push	esi
		push	(offset	loc_8C602C+4)
		push	11F7h
		jmp	short loc_A2474F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24731:				; CODE XREF: AslpFileGet16BitModuleName(x,x)+52j
		lea	edx, [ebp+var_104]
		mov	ecx, edi
		call	_AslStringAnsiToUnicode@8 ; AslStringAnsiToUnicode(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A2475E
		push	esi
		push	offset ??_C@_0CD@HDIACEIF@AslStringAnsiToUnicode?5failed?5?$FL@NNGAKEGL@
		push	11FDh

loc_A2474F:				; CODE XREF: AslpFileGet16BitModuleName(x,x)+5Fj
		push	offset ??_C@_0BL@EJPFEEEP@AslpFileGet16BitModuleName@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A2475E:				; CODE XREF: AslpFileGet16BitModuleName(x,x)+72j
		mov	eax, esi

loc_A24760:				; CODE XREF: AslpFileGet16BitModuleName(x,x)+29j
		mov	ecx, [ebp+var_4]
		pop	edi
		xor	ecx, ebp
		pop	esi
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn
_AslpFileGet16BitModuleName@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetChecksum(x, x)
_AslpFileGetChecksum@8 proc near	; CODE XREF: AslpFileGetChecksumAttributes(x,x)+C7p

var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	24h
		push	offset dword_6AACA0
		call	__SEH_prolog4
		mov	eax, edx
		mov	[ebp+var_24], eax
		mov	[ebp+var_2C], ecx
		mov	ebx, 1000h
		mov	edx, 200h
		xor	edi, edi
		mov	esi, edi
		mov	eax, [eax+8]
		cmp	eax, ebx
		jnb	short loc_A2479D
		mov	edx, edi
		mov	ebx, eax
		jmp	short loc_A247AA
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2479D:				; CODE XREF: AslpFileGetChecksum(x,x)+27j
		cmp	eax, 1200h
		jnb	short loc_A247AA
		lea	edx, [eax-1000h]

loc_A247AA:				; CODE XREF: AslpFileGetChecksum(x,x)+2Dj
					; AslpFileGetChecksum(x,x)+34j
		mov	[ebp+ms_exc.disabled], edi
		cmp	ebx, 4
		jb	short loc_A247F1
		mov	ecx, [ebp+var_24]
		mov	ecx, [ecx+10h]
		add	ecx, edx
		mov	[ebp+var_20], ecx
		mov	edx, edi

loc_A247BF:				; CODE XREF: AslpFileGetChecksum(x,x)+7Ej
		mov	[ebp+var_28], edx
		mov	eax, ebx
		shr	eax, 2
		cmp	edx, eax
		jnb	short loc_A247EE
		add	esi, [ecx]
		mov	[ebp+var_1C], esi
		add	ecx, 4
		mov	[ebp+var_20], ecx
		mov	eax, esi
		shr	esi, 1
		mov	[ebp+var_1C], esi
		and	eax, 1
		jz	short loc_A247EB
		or	esi, 80000000h
		mov	[ebp+var_1C], esi

loc_A247EB:				; CODE XREF: AslpFileGetChecksum(x,x)+72j
		inc	edx
		jmp	short loc_A247BF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A247EE:				; CODE XREF: AslpFileGetChecksum(x,x)+5Bj
		mov	ecx, [ebp+var_2C]

loc_A247F1:				; CODE XREF: AslpFileGetChecksum(x,x)+42j
		mov	[ecx], esi
		mov	[ebp+var_34], edi
		jmp	short loc_A24829
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A247F8:				; DATA XREF: .text:006AACB4o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_30], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24806:				; DATA XREF: .text:006AACB8o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	edi, [ebp+var_30]
		mov	[ebp+var_34], edi
		push	edi
		push	(offset	loc_8C4D43+3)
		push	1390h
		push	(offset	loc_8C60FD+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A24829:				; CODE XREF: AslpFileGetChecksum(x,x)+88j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	eax, edi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetChecksum@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetChecksumAttributes(x, x)
_AslpFileGetChecksumAttributes@8 proc near
					; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+2C2p

var_28		= dword	ptr -28h
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	ebx
		push	esi
		push	edi
		mov	ebx, ecx
		mov	[ebp+var_8], edx
		push	8
		xor	eax, eax
		lea	edi, [ebp+var_28]
		pop	ecx
		rep stosd
		cmp	[edx+34h], eax
		jz	short loc_A24896
		push	offset ??_C@_0FA@BMENCCAD@AslpFileGetChecksumAttributes?5c@NNGAKEGL@
		push	12B7h
		push	offset ??_C@_0BO@PDLAAKIB@AslpFileGetChecksumAttributes@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		mov	esi, 0C0000001h
		push	2
		pop	edi
		or	[ebx+40h], edi
		or	[ebx+280h], edi
		or	[ebx+340h], edi
		jmp	loc_A24990
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24896:				; CODE XREF: AslpFileGetChecksumAttributes(x,x)+1Dj
		mov	ecx, edx
		call	_AslFileMappingEnsureMappedAs@8	; AslFileMappingEnsureMappedAs(x,x)
		mov	esi, eax
		mov	ecx, 0C000010Eh
		test	esi, esi
		jns	short loc_A248CB
		cmp	esi, ecx
		jz	short loc_A248CB
		push	esi
		push	offset ??_C@_0CJ@NGKNMDF@AslFileMappingEnsureMappedAs?5fa@NNGAKEGL@
		push	1300h

loc_A248B7:				; CODE XREF: AslpFileGetChecksumAttributes(x,x)+B6j
					; AslpFileGetChecksumAttributes(x,x)+DDj ...
		push	offset ??_C@_0BO@PDLAAKIB@AslpFileGetChecksumAttributes@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A24990
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A248CB:				; CODE XREF: AslpFileGetChecksumAttributes(x,x)+64j
					; AslpFileGetChecksumAttributes(x,x)+68j
		mov	eax, [ebp+var_8]
		add	eax, 8
		mov	[ebp+var_8], eax
		cmp	esi, ecx
		jnz	short loc_A24900
		mov	eax, [eax]
		lea	ecx, [ebp+var_28]
		xor	dl, dl
		mov	[ebp+var_28], eax
		call	_RtlFileMapMapView@8 ; RtlFileMapMapView(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A248FA
		push	esi
		push	(offset	loc_8C58AE+2)
		push	1312h
		jmp	short loc_A248B7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A248FA:				; CODE XREF: AslpFileGetChecksumAttributes(x,x)+A9j
		lea	eax, [ebp+var_28]
		mov	[ebp+var_8], eax

loc_A24900:				; CODE XREF: AslpFileGetChecksumAttributes(x,x)+94j
		and	[ebp+var_4], 0
		lea	ecx, [ebp+var_4]
		mov	edx, eax
		call	_AslpFileGetChecksum@8 ; AslpFileGetChecksum(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24921
		push	esi
		push	offset ??_C@_0CA@ECIAAMCP@AslpFileGetChecksum?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	1324h
		jmp	short loc_A248B7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24921:				; CODE XREF: AslpFileGetChecksumAttributes(x,x)+D0j
		mov	eax, [ebp+var_4]
		lea	ecx, [ebp+var_4]
		mov	edx, [ebp+var_8]
		and	dword ptr [ebx+3Ch], 0
		or	dword ptr [ebx+40h], 1
		and	[ebp+var_4], 0
		push	2
		pop	edi
		mov	[ebx+30h], edi
		mov	dword ptr [ebx+34h], 4
		mov	[ebx+38h], eax
		call	_AslpFileGetCrcChecksum@8 ; AslpFileGetCrcChecksum(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24961
		push	esi
		push	(offset	loc_8C6149+1)
		push	1335h
		jmp	loc_A248B7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24961:				; CODE XREF: AslpFileGetChecksumAttributes(x,x)+10Dj
		mov	eax, [ebp+var_4]
		and	dword ptr [ebx+27Ch], 0
		or	dword ptr [ebx+280h], 1
		or	[ebx+340h], edi
		xor	esi, esi
		mov	[ebx+270h], edi
		mov	dword ptr [ebx+274h], 4
		mov	[ebx+278h], eax

loc_A24990:				; CODE XREF: AslpFileGetChecksumAttributes(x,x)+4Fj
					; AslpFileGetChecksumAttributes(x,x)+84j
		lea	ecx, [ebp+var_28]
		call	RtlFileMapFree
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetChecksumAttributes@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetClrVersion(x, x)
_AslpFileGetClrVersion@8 proc near	; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+C0p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	18h
		push	offset dword_6AAC60
		call	__SEH_prolog4
		mov	eax, edx
		mov	[ebp+var_24], eax
		mov	ebx, ecx
		and	[ebp+var_20], 0
		xor	edi, edi
		mov	byte ptr [ebx],	0
		lea	ecx, [ebp+var_20]
		call	_AslpFileGetImageNtHeader@8 ; AslpFileGetImageNtHeader(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A249E8
		push	esi
		push	offset ??_C@_0CF@GGCNCAGG@AslpFileGetImageNtHeader?5failed@NNGAKEGL@
		push	156Bh
		push	offset ??_C@_0BG@BCKDAEDA@AslpFileGetClrVersion@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A24B22
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A249E8:				; CODE XREF: AslpFileGetClrVersion(x,x)+28j
		and	[ebp+ms_exc.disabled], edi
		mov	esi, [ebp+var_20]
		movzx	eax, word ptr [esi+18h]
		mov	ecx, 10Bh
		cmp	ax, cx
		jnz	short loc_A24A04
		lea	edi, [esi+0E8h]
		jmp	short loc_A24A14
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24A04:				; CODE XREF: AslpFileGetClrVersion(x,x)+5Bj
		mov	ecx, 20Bh
		cmp	ax, cx
		jnz	short loc_A24A14
		lea	edi, [esi+0F8h]

loc_A24A14:				; CODE XREF: AslpFileGetClrVersion(x,x)+63j
					; AslpFileGetClrVersion(x,x)+6Dj
		test	edi, edi
		jz	loc_A24AE0
		mov	eax, [edi]
		test	eax, eax
		jz	loc_A24AE0
		cmp	dword ptr [edi+4], 48h
		jb	loc_A24AE0
		mov	edi, [ebp+var_24]
		push	eax
		lea	edx, [edi+8]
		mov	ecx, esi
		call	_AslpImageRvaToVa@12 ; AslpImageRvaToVa(x,x,x)
		test	eax, eax
		jnz	short loc_A24A68
		push	(offset	loc_8C62A0+4)
		push	1588h

loc_A24A4C:				; CODE XREF: AslpFileGetClrVersion(x,x)+F4j
					; AslpFileGetClrVersion(x,x)+13Cj
		mov	esi, 0C000007Bh

loc_A24A51:				; CODE XREF: AslpFileGetClrVersion(x,x)+10Dj
		mov	[ebp+var_1C], esi
		push	offset ??_C@_0BG@BCKDAEDA@AslpFileGetClrVersion@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	loc_A24B1B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24A68:				; CODE XREF: AslpFileGetClrVersion(x,x)+A1j
		cmp	word ptr [eax+4], 2
		jz	short loc_A24A76
		mov	esi, 0C00000BBh
		jmp	short loc_A24AE5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24A76:				; CODE XREF: AslpFileGetClrVersion(x,x)+CEj
		push	dword ptr [eax+8]
		lea	edx, [edi+8]
		mov	ecx, esi
		call	_AslpImageRvaToVa@12 ; AslpImageRvaToVa(x,x,x)
		mov	ecx, eax
		test	ecx, ecx
		jnz	short loc_A24A95
		push	offset ??_C@_0DD@FHOOCCGJ@Invalid?5COR20?5Metadata?5virtual?5@NNGAKEGL@
		push	159Ch
		jmp	short loc_A24A4C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24A95:				; CODE XREF: AslpFileGetClrVersion(x,x)+E8j
		cmp	dword ptr [ecx], 424A5342h
		jz	short loc_A24AAE
		mov	esi, 0C00000BBh
		push	offset ??_C@_0CN@DHBHKMFP@Invalid?5COR20?5Metadata?5signatur@NNGAKEGL@
		push	15A6h
		jmp	short loc_A24A51
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24AAE:				; CODE XREF: AslpFileGetClrVersion(x,x)+FCj
		mov	esi, [ecx+0Ch]
		lea	eax, [esi-1]
		cmp	eax, 0FEh
		ja	short loc_A24AD1
		push	esi		; size_t
		lea	eax, [ecx+10h]
		push	eax		; void *
		push	ebx		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	byte ptr [esi+ebx], 0
		xor	esi, esi
		jmp	short loc_A24AE5
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24AD1:				; CODE XREF: AslpFileGetClrVersion(x,x)+11Aj
		push	offset ??_C@_0CE@HKAOIBJK@CLR?5version?5string?5null?5or?5too?5@NNGAKEGL@
		push	15B2h
		jmp	loc_A24A4C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24AE0:				; CODE XREF: AslpFileGetClrVersion(x,x)+77j
					; AslpFileGetClrVersion(x,x)+81j ...
		mov	esi, 0C000007Bh

loc_A24AE5:				; CODE XREF: AslpFileGetClrVersion(x,x)+D5j
					; AslpFileGetClrVersion(x,x)+130j
		mov	[ebp+var_1C], esi
		jmp	short loc_A24B1B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24AEA:				; DATA XREF: .text:006AAC74o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_28], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24AF8:				; DATA XREF: .text:006AAC78o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_28]
		mov	[ebp+var_1C], esi
		push	esi
		push	(offset	loc_8C4D43+3)
		push	15C9h
		push	offset ??_C@_0BG@BCKDAEDA@AslpFileGetClrVersion@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A24B1B:				; CODE XREF: AslpFileGetClrVersion(x,x)+C4j
					; AslpFileGetClrVersion(x,x)+149j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh

loc_A24B22:				; CODE XREF: AslpFileGetClrVersion(x,x)+44j
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetClrVersion@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetClrVersionAttribute(x, x)
_AslpFileGetClrVersionAttribute@8 proc near
					; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+284p

var_10C		= dword	ptr -10Ch
var_108		= dword	ptr -108h
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 10Ch
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	ebx
		push	esi
		push	edi
		push	100h		; size_t
		xor	esi, esi
		lea	eax, [ebp+var_108]
		push	esi		; int
		push	eax		; void *
		mov	ebx, edx
		mov	edi, ecx
		call	_memset
		add	esp, 0Ch
		mov	[ebp+var_10C], esi
		mov	ecx, ebx
		call	_AslFileMappingEnsure@4	; AslFileMappingEnsure(x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24B99
		push	esi
		push	offset ??_C@_0CB@GHEHFDAF@AslFileMappingEnsure?5failed?5?$FL?$CFx@NNGAKEGL@
		push	150Dh

loc_A24B85:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+9Cj
					; AslpFileGetClrVersionAttribute(x,x)+D6j ...
		push	(offset	loc_8C60B8+4)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A24C9B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24B99:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+44j
		cmp	dword ptr [ebx+28h], 6
		jz	short loc_A24BAD

loc_A24B9F:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+B6j
		or	dword ptr [edi+298h], 2
		xor	esi, esi
		jmp	loc_A24C9B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24BAD:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+69j
		test	byte ptr [edi+2B0h], 1
		jnz	short loc_A24BD2
		mov	edx, ebx
		mov	ecx, edi
		call	_AslpFileGetFileKindDetailAttribute@8 ;	AslpFileGetFileKindDetailAttribute(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24BD2
		push	esi
		push	offset ??_C@_0CP@DAOJOCEB@AslpFileGetFileKindDetailAttrib@NNGAKEGL@
		push	151Eh
		jmp	short loc_A24B85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24BD2:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+80j
					; AslpFileGetClrVersionAttribute(x,x)+8Fj
		mov	eax, [edi+2A8h]
		cmp	eax, 0Ch
		jz	short loc_A24BEC
		cmp	eax, 0Dh
		jz	short loc_A24BEC
		cmp	eax, 0Eh
		jz	short loc_A24BEC
		cmp	eax, 0Fh
		jnz	short loc_A24B9F

loc_A24BEC:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+A7j
					; AslpFileGetClrVersionAttribute(x,x)+ACj ...
		mov	edx, ebx
		lea	ecx, [ebp+var_108]
		call	_AslpFileGetClrVersion@8 ; AslpFileGetClrVersion(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24C0F
		push	esi
		push	offset ??_C@_0CC@HLMBHAHE@AslpFileGetClrVersion?5failed?5?$FL?$CF@NNGAKEGL@
		push	1531h
		jmp	loc_A24B85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24C0F:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+C9j
		lea	edx, [ebp+var_108]
		lea	ecx, [ebp+var_10C]
		call	_AslStringAnsiToUnicode@8 ; AslStringAnsiToUnicode(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24C36
		push	esi
		push	offset ??_C@_0CD@HDIACEIF@AslStringAnsiToUnicode?5failed?5?$FL@NNGAKEGL@
		push	1537h
		jmp	loc_A24B85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24C36:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+F0j
		mov	ecx, [ebp+var_10C]
		call	_AslStringXmlSanitize@4	; AslStringXmlSanitize(x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24C57
		push	esi
		push	offset ??_C@_0CB@KOMIGNHG@AslStringXmlSanitize?5failed?5?$FL?$CFx@NNGAKEGL@
		push	153Dh
		jmp	loc_A24B85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24C57:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+111j
		mov	edx, [ebp+var_10C]
		xor	esi, esi
		mov	dword ptr [edi+288h], 4
		lea	eax, [edx+2]

loc_A24C6C:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+141j
		mov	cx, [edx]
		add	edx, 2
		cmp	cx, si
		jnz	short loc_A24C6C
		sub	edx, eax
		mov	eax, [ebp+var_10C]
		sar	edx, 1
		or	dword ptr [edi+298h], 5
		mov	[edi+28Ch], edx
		cdq
		mov	[edi+290h], eax
		mov	[edi+294h], edx

loc_A24C9B:				; CODE XREF: AslpFileGetClrVersionAttribute(x,x)+60j
					; AslpFileGetClrVersionAttribute(x,x)+74j
		mov	ecx, [ebp+var_4]
		mov	eax, esi
		pop	edi
		pop	esi
		xor	ecx, ebp
		pop	ebx
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn
_AslpFileGetClrVersionAttribute@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetCrcChecksum(x, x)
_AslpFileGetCrcChecksum@8 proc near	; CODE XREF: AslpFileGetChecksumAttributes(x,x)+104p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	10h
		push	offset dword_6AAC80
		call	__SEH_prolog4
		mov	eax, edx
		mov	ebx, ecx
		xor	edi, edi
		mov	[ebp+ms_exc.disabled], edi
		cmp	[eax+0Ch], edi
		ja	short loc_A24CDB
		jb	short loc_A24CD1
		cmp	dword ptr [eax+8], 2000h
		jnb	short loc_A24CDB

loc_A24CD1:				; CODE XREF: AslpFileGetCrcChecksum(x,x)+1Aj
		push	dword ptr [eax+14h]
		mov	edx, [eax+10h]
		xor	ecx, ecx
		jmp	short loc_A24CF9
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24CDB:				; CODE XREF: AslpFileGetCrcChecksum(x,x)+18j
					; AslpFileGetCrcChecksum(x,x)+23j
		mov	edx, [eax+10h]
		mov	ecx, 1000h
		push	ecx
		mov	esi, [eax+8]
		push	ecx
		xor	ecx, ecx
		call	_AslComputeCrc32@12 ; AslComputeCrc32(x,x,x)
		add	edx, 0FFFFF000h
		add	edx, esi
		mov	ecx, eax

loc_A24CF9:				; CODE XREF: AslpFileGetCrcChecksum(x,x)+2Dj
		call	_AslComputeCrc32@12 ; AslComputeCrc32(x,x,x)
		mov	[ebx], eax
		mov	[ebp+var_1C], edi
		jmp	short loc_A24D36
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24D05:				; DATA XREF: .text:006AAC94o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_20], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24D13:				; DATA XREF: .text:006AAC98o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	edi, [ebp+var_20]
		mov	[ebp+var_1C], edi
		push	edi
		push	(offset	loc_8C4D43+3)
		push	13F6h
		push	(offset	loc_8C6111+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A24D36:				; CODE XREF: AslpFileGetCrcChecksum(x,x)+57j
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	eax, edi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetCrcChecksum@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetExeWrapper(x, x)
_AslpFileGetExeWrapper@8 proc near	; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+63p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	18h
		push	offset dword_6AAD40
		call	__SEH_prolog4
		mov	ebx, edx
		mov	edi, ecx
		xor	eax, eax
		mov	[ebp+var_20], eax
		mov	[edi], eax
		mov	[ebp+var_1C], eax
		cmp	dword ptr [ebx+14h], 1
		jb	short loc_A24D7D
		ja	short loc_A24D76
		cmp	[ebx+10h], eax
		jb	short loc_A24D7D

loc_A24D76:				; CODE XREF: AslpFileGetExeWrapper(x,x)+20j
		xor	eax, eax
		jmp	loc_A24E87
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24D7D:				; CODE XREF: AslpFileGetExeWrapper(x,x)+1Ej
					; AslpFileGetExeWrapper(x,x)+25j
		lea	ecx, [ebp+var_1C]
		call	_AslpFileGetImageNtHeader@8 ; AslpFileGetImageNtHeader(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24DAA
		push	esi
		push	offset ??_C@_0CF@GGCNCAGG@AslpFileGetImageNtHeader?5failed@NNGAKEGL@
		push	0F90h
		push	offset ??_C@_0BG@HGDCKIPM@AslpFileGetExeWrapper@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A24E85
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24DAA:				; CODE XREF: AslpFileGetExeWrapper(x,x)+3Aj
		and	[ebp+ms_exc.disabled], 0
		mov	ecx, [ebp+var_1C]
		call	_AslpFileHasSecuromWrapper@4 ; AslpFileHasSecuromWrapper(x)
		test	eax, eax
		jz	short loc_A24DC5
		mov	dword ptr [edi], 1
		jmp	loc_A24E46
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24DC5:				; CODE XREF: AslpFileGetExeWrapper(x,x)+69j
		push	ebx
		mov	edx, [ebp+var_1C]
		lea	ecx, [ebp+var_20]
		call	_AslpFileHasActiveMarkWrapper@12 ; AslpFileHasActiveMarkWrapper(x,x,x)
		mov	esi, eax
		mov	[ebp+var_24], esi
		test	esi, esi
		jns	short loc_A24E12
		mov	eax, 0C0000225h
		cmp	esi, eax
		jnz	short loc_A24E05
		push	eax
		push	dword ptr [ebx+14h]
		push	dword ptr [ebx+10h]
		push	offset ??_C@_0DL@MCGFOHLO@AslpFileHasActiveMarkWrapper?5fa@NNGAKEGL@
		push	0FA9h
		push	offset ??_C@_0BG@HGDCKIPM@AslpFileGetExeWrapper@NNGAKEGL@
		push	2
		call	AslLogCallPrintf
		add	esp, 1Ch
		jmp	short loc_A24E7E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24E05:				; CODE XREF: AslpFileGetExeWrapper(x,x)+92j
		push	esi
		push	offset ??_C@_0CJ@OLKHAPFK@AslpFileHasActiveMarkWrapper?5fa@NNGAKEGL@ ; "AslpFileHasActiveMarkWrapper failed [%x"...
		push	0FABh
		jmp	short loc_A24E6F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24E12:				; CODE XREF: AslpFileGetExeWrapper(x,x)+89j
		cmp	[ebp+var_20], 0
		jz	short loc_A24E20
		mov	dword ptr [edi], 2
		jmp	short loc_A24E46
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24E20:				; CODE XREF: AslpFileGetExeWrapper(x,x)+C7j
		mov	ecx, [ebp+var_1C]
		call	_AslpFileHasArmadilloWrapper@4 ; AslpFileHasArmadilloWrapper(x)
		test	eax, eax
		jz	short loc_A24E34
		mov	dword ptr [edi], 3
		jmp	short loc_A24E46
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24E34:				; CODE XREF: AslpFileGetExeWrapper(x,x)+DBj
		mov	ecx, [ebp+var_1C]
		call	_AslpHasStarForceWrapper@4 ; AslpHasStarForceWrapper(x)
		test	eax, eax
		jz	short loc_A24E46
		mov	dword ptr [edi], 4

loc_A24E46:				; CODE XREF: AslpFileGetExeWrapper(x,x)+71j
					; AslpFileGetExeWrapper(x,x)+CFj ...
		xor	esi, esi
		mov	[ebp+var_24], esi
		jmp	short loc_A24E7E
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24E4D:				; DATA XREF: .text:006AAD54o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_28], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24E5B:				; DATA XREF: .text:006AAD58o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_28]
		mov	[ebp+var_24], esi
		push	esi
		push	(offset	loc_8C4D43+3)
		push	0FBFh

loc_A24E6F:				; CODE XREF: AslpFileGetExeWrapper(x,x)+C1j
		push	offset ??_C@_0BG@HGDCKIPM@AslpFileGetExeWrapper@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A24E7E:				; CODE XREF: AslpFileGetExeWrapper(x,x)+B4j
					; AslpFileGetExeWrapper(x,x)+FCj
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh

loc_A24E85:				; CODE XREF: AslpFileGetExeWrapper(x,x)+56j
		mov	eax, esi

loc_A24E87:				; CODE XREF: AslpFileGetExeWrapper(x,x)+29j
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetExeWrapper@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetExportName(x, x)
_AslpFileGetExportName@8 proc near	; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+A4p

var_104		= dword	ptr -104h
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 104h
		mov	eax, ___security_cookie
		xor	eax, ebp
		mov	[ebp+var_4], eax
		push	esi
		push	edi
		push	100h		; size_t
		lea	eax, [ebp+var_104]
		mov	esi, edx
		push	0		; int
		push	eax		; void *
		mov	edi, ecx
		call	_memset
		add	esp, 0Ch
		lea	ecx, [ebp+var_104]
		mov	edx, esi
		call	_AslpFileQueryExportName_Vb@8 ;	AslpFileQueryExportName_Vb(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24F07
		cmp	esi, 0C0000225h
		jz	short loc_A24F29
		cmp	esi, 0C000007Bh
		jz	short loc_A24F29
		push	esi
		push	offset ??_C@_0CE@GHMPLADB@AslpFileQueryExportName?5failed?5@NNGAKEGL@
		push	10C6h

loc_A24EF6:				; CODE XREF: AslpFileGetExportName(x,x)+8Ej
		push	(offset	loc_8C5F77+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A24F29
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24F07:				; CODE XREF: AslpFileGetExportName(x,x)+42j
		lea	edx, [ebp+var_104]
		mov	ecx, edi
		call	_AslStringAnsiToUnicode@8 ; AslStringAnsiToUnicode(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A24F27
		push	esi
		push	offset ??_C@_0CD@HDIACEIF@AslStringAnsiToUnicode?5failed?5?$FL@NNGAKEGL@
		push	10CDh
		jmp	short loc_A24EF6
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24F27:				; CODE XREF: AslpFileGetExportName(x,x)+81j
		xor	esi, esi

loc_A24F29:				; CODE XREF: AslpFileGetExportName(x,x)+4Aj
					; AslpFileGetExportName(x,x)+52j ...
		mov	ecx, [ebp+var_4]
		mov	eax, esi
		pop	edi
		xor	ecx, ebp
		pop	esi
		call	@__security_check_cookie@4 ; __security_check_cookie(x)
		leave
		retn
_AslpFileGetExportName@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetFileKindDetailAttribute(x, x)
_AslpFileGetFileKindDetailAttribute@8 proc near
					; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+200p
					; AslpFileGetClrVersionAttribute(x,x)+86p

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		and	[ebp+var_4], 0
		push	esi
		mov	esi, ecx
		lea	ecx, [ebp+var_4]
		push	edi
		call	_AslFileMappingGetFileKindDetail@8 ; AslFileMappingGetFileKindDetail(x,x)
		mov	edi, eax
		test	edi, edi
		jns	short loc_A24F72
		push	edi
		push	(offset	loc_8C61FC+2)
		push	15ECh
		push	offset ??_C@_0CD@IEAEKNMD@AslpFileGetFileKindDetailAttrib@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A24F9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24F72:				; CODE XREF: AslpFileGetFileKindDetailAttribute(x,x)+1Bj
		mov	eax, [ebp+var_4]
		or	dword ptr [esi+2B0h], 1
		xor	edi, edi
		cdq
		mov	dword ptr [esi+2A0h], 2
		mov	dword ptr [esi+2A4h], 4
		mov	[esi+2A8h], eax
		mov	[esi+2ACh], edx

loc_A24F9F:				; CODE XREF: AslpFileGetFileKindDetailAttribute(x,x)+37j
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
_AslpFileGetFileKindDetailAttribute@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetHeaderAttributesNE(x, x)
_AslpFileGetHeaderAttributesNE@8 proc near
					; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+2A3p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		mov	ebx, edx
		xor	eax, eax
		mov	esi, ecx
		mov	[ebp+var_C], ebx
		push	edi
		mov	ecx, ebx
		mov	[ebp+var_4], eax
		mov	[ebp+var_8], eax
		call	_AslFileMappingEnsure@4	; AslFileMappingEnsure(x)
		mov	edi, eax
		test	edi, edi
		jns	short loc_A24FEB
		push	edi
		push	offset ??_C@_0CB@GHEHFDAF@AslFileMappingEnsure?5failed?5?$FL?$CFx@NNGAKEGL@
		push	0E58h

loc_A24FD7:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+C3j
					; AslpFileGetHeaderAttributesNE(x,x)+137j
		push	offset ??_C@_0BO@ECMFKLEM@AslpFileGetHeaderAttributesNE@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A25126
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A24FEB:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+25j
		cmp	dword ptr [ebx+28h], 5
		push	2
		pop	ebx
		jz	short loc_A25007
		or	[esi+1F0h], ebx
		or	[esi+208h], ebx
		xor	edi, edi
		jmp	loc_A25126
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25007:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+4Dj
		mov	edx, [ebp+var_C]
		lea	ecx, [ebp+var_4]
		or	[esi+1C0h], ebx
		or	[esi+1D8h], ebx
		or	[esi+220h], ebx
		or	[esi+28h], ebx
		or	[esi+268h], ebx
		or	[esi+238h], ebx
		or	[esi+2C8h], ebx
		or	[esi+2E0h], ebx
		or	[esi+2F8h], ebx
		or	[esi+328h], ebx
		call	_AslpFileGet16BitDescription@8 ; AslpFileGet16BitDescription(x,x)
		test	eax, eax
		js	short loc_A250AC
		mov	ecx, [ebp+var_4]
		call	_AslStringXmlSanitize@4	; AslStringXmlSanitize(x)
		mov	edi, eax
		test	edi, edi
		jns	short loc_A2506D
		push	edi
		push	offset ??_C@_0CB@KOMIGNHG@AslStringXmlSanitize?5failed?5?$FL?$CFx@NNGAKEGL@
		push	0E7Ch
		jmp	loc_A24FD7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2506D:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+B6j
		mov	edx, [ebp+var_4]
		xor	edi, edi
		mov	dword ptr [esi+1E0h], 4
		lea	eax, [edx+2]

loc_A2507F:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+E2j
		mov	cx, [edx]
		add	edx, ebx
		cmp	cx, di
		jnz	short loc_A2507F
		sub	edx, eax
		mov	eax, [ebp+var_4]
		sar	edx, 1
		or	dword ptr [esi+1F0h], 5
		mov	[esi+1E4h], edx
		cdq
		mov	[esi+1E8h], eax
		mov	[esi+1ECh], edx
		jmp	short loc_A250B4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A250AC:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+A8j
		or	[esi+1F0h], ebx
		xor	edi, edi

loc_A250B4:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+105j
		mov	edx, [ebp+var_C]
		lea	ecx, [ebp+var_8]
		call	_AslpFileGet16BitModuleName@8 ;	AslpFileGet16BitModuleName(x,x)
		test	eax, eax
		js	short loc_A25120
		mov	ecx, [ebp+var_8]
		call	_AslStringXmlSanitize@4	; AslStringXmlSanitize(x)
		mov	edi, eax
		test	edi, edi
		jns	short loc_A250E1
		push	edi
		push	offset ??_C@_0CB@KOMIGNHG@AslStringXmlSanitize?5failed?5?$FL?$CFx@NNGAKEGL@
		push	0E91h
		jmp	loc_A24FD7
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A250E1:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+12Aj
		mov	edx, [ebp+var_8]
		xor	edi, edi
		mov	dword ptr [esi+1F8h], 4
		lea	eax, [edx+2]

loc_A250F3:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+156j
		mov	cx, [edx]
		add	edx, ebx
		cmp	cx, di
		jnz	short loc_A250F3
		sub	edx, eax
		mov	eax, [ebp+var_8]
		sar	edx, 1
		or	dword ptr [esi+208h], 5
		mov	[esi+1FCh], edx
		cdq
		mov	[esi+200h], eax
		mov	[esi+204h], edx
		jmp	short loc_A25126
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25120:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+11Cj
		or	[esi+208h], ebx

loc_A25126:				; CODE XREF: AslpFileGetHeaderAttributesNE(x,x)+41j
					; AslpFileGetHeaderAttributesNE(x,x)+5Dj ...
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetHeaderAttributesNE@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetHeaderAttributesPE(x, x)
_AslpFileGetHeaderAttributesPE@8 proc near
					; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+223p

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		xor	eax, eax
		push	ebx
		push	esi
		mov	ebx, edx
		mov	[ebp+var_14], eax
		mov	esi, ecx
		mov	[ebp+var_18], eax
		push	edi
		mov	ecx, ebx
		mov	[ebp+var_1C], eax
		mov	[ebp+var_4], eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_10], eax
		call	_AslFileMappingEnsure@4	; AslFileMappingEnsure(x)
		mov	edi, eax
		test	edi, edi
		jns	short loc_A2517F
		push	edi
		push	offset ??_C@_0CB@GHEHFDAF@AslFileMappingEnsure?5failed?5?$FL?$CFx@NNGAKEGL@
		push	0DCFh
		push	offset ??_C@_0BO@FEHNCFDG@AslpFileGetHeaderAttributesPE@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A25376
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2517F:				; CODE XREF: AslpFileGetHeaderAttributesPE(x,x)+31j
		cmp	dword ptr [ebx+28h], 6
		push	2
		pop	edi
		jz	short loc_A251BA
		or	[esi+1C0h], edi
		or	[esi+1D8h], edi
		or	[esi+220h], edi
		or	[esi+28h], edi
		or	[esi+2F8h], edi
		or	[esi+2C8h], edi
		or	[esi+2E0h], edi
		or	[esi+328h], edi
		jmp	loc_A25374
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A251BA:				; CODE XREF: AslpFileGetHeaderAttributesPE(x,x)+59j
		or	[esi+1F0h], edi
		lea	eax, [ebp+var_1C]
		or	[esi+208h], edi
		lea	edx, [ebp+var_8]
		push	ebx
		push	ecx
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	ecx, [ebp+var_4]
		call	_AslpFileGetNtHeaderAttributes@36 ; AslpFileGetNtHeaderAttributes(x,x,x,x,x,x,x,x,x)
		mov	ecx, [esi+1C0h]
		mov	edx, [esi+2F8h]
		mov	[ebp+var_20], ecx
		mov	ecx, [esi+1D8h]
		mov	[ebp+var_24], ecx
		mov	ecx, [esi+220h]
		mov	[ebp+var_28], ecx
		mov	ecx, [esi+28h]
		mov	[ebp+var_2C], ecx
		mov	ecx, [esi+2C8h]
		mov	[ebp+var_30], ecx
		mov	ecx, [esi+328h]
		mov	[ebp+var_34], edx
		mov	[ebp+var_38], ecx
		test	eax, eax
		js	loc_A25325
		mov	eax, [ebp+var_4]
		xor	ecx, ecx
		mov	[esi+1B8h], eax
		inc	ecx
		mov	eax, [ebp+var_20]
		or	eax, ecx
		and	dword ptr [esi+1BCh], 0
		mov	[esi+1C0h], eax
		mov	eax, [ebp+var_8]
		mov	[esi+1D0h], eax
		mov	eax, [ebp+var_24]
		or	eax, ecx
		and	dword ptr [esi+1D4h], 0
		mov	[esi+1D8h], eax
		mov	eax, [ebp+var_C]
		and	dword ptr [esi+21Ch], 0
		and	dword ptr [esi+24h], 0
		mov	[esi+218h], eax
		mov	eax, [ebp+var_28]
		or	eax, ecx
		mov	[esi+1B0h], edi
		mov	[esi+220h], eax
		mov	eax, [ebp+var_10]
		mov	[esi+20h], eax
		mov	eax, [ebp+var_2C]
		or	eax, ecx
		mov	[esi+1C8h], edi
		mov	[esi+28h], eax
		movzx	eax, word ptr [ebp+var_14]
		push	4
		pop	edx
		mov	[esi+1B4h], edx
		mov	[esi+1CCh], edx
		mov	[esi+214h], edx
		mov	[esi+1Ch], edx
		cdq
		mov	[esi+2C0h], eax
		mov	eax, [ebp+var_30]
		or	eax, ecx
		mov	[esi+2C4h], edx
		mov	[esi+2C8h], eax
		movzx	eax, word ptr [ebp+var_18]
		cdq
		mov	[esi+2D8h], eax
		movzx	eax, word ptr [ebp+var_1C]
		mov	[esi+2DCh], edx
		cdq
		mov	[esi+2F4h], edx
		mov	edx, [ebp+var_34]
		mov	[esi+210h], edi
		mov	[esi+18h], edi
		mov	[esi+2B8h], ecx
		mov	[esi+2BCh], edi
		mov	[esi+2D0h], ecx
		mov	[esi+2D4h], edi
		mov	[esi+2E8h], ecx
		mov	[esi+2ECh], edi
		mov	[esi+2F0h], eax
		jmp	short loc_A2535B
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25325:				; CODE XREF: AslpFileGetHeaderAttributesPE(x,x)+F8j
		mov	eax, [ebp+var_20]
		mov	ecx, edi
		or	eax, edi
		mov	[esi+1C0h], eax
		mov	eax, [ebp+var_24]
		or	eax, edi
		mov	[esi+1D8h], eax
		mov	eax, [ebp+var_28]
		or	eax, edi
		mov	[esi+220h], eax
		mov	eax, [ebp+var_2C]
		or	eax, edi
		mov	[esi+28h], eax
		mov	eax, [ebp+var_30]
		or	eax, edi
		mov	[esi+2C8h], eax

loc_A2535B:				; CODE XREF: AslpFileGetHeaderAttributesPE(x,x)+1F6j
		mov	eax, [ebp+var_38]
		or	edx, ecx
		or	[esi+2E0h], ecx
		or	eax, edi
		mov	[esi+2F8h], edx
		mov	[esi+328h], eax

loc_A25374:				; CODE XREF: AslpFileGetHeaderAttributesPE(x,x)+88j
		xor	edi, edi

loc_A25376:				; CODE XREF: AslpFileGetHeaderAttributesPE(x,x)+4Dj
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetHeaderAttributesPE@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetImageNtHeader(x,	x)
_AslpFileGetImageNtHeader@8 proc near	; CODE XREF: AslpFileGetNtHeaderAttributes(x,x,x,x,x,x,x,x,x)+1Ap
					; AslpFileQueryExportName_Vb(x,x)+20p ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	10h
		push	offset dword_6AADA0
		call	__SEH_prolog4
		mov	edi, ecx
		cmp	dword ptr [edx+28h], 6
		jz	short loc_A253B2
		mov	esi, 0C00000BBh
		push	esi
		push	offset ??_C@_0BL@MMANKHCP@File?5mapping?5not?5a?5PE?5?$FL?$CFx?$FN@NNGAKEGL@
		push	0F50h
		push	offset ??_C@_0BJ@PNILLELB@AslpFileGetImageNtHeader@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A25428
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A253B2:				; CODE XREF: AslpFileGetImageNtHeader(x,x)+12j
		xor	esi, esi
		mov	[ebp+ms_exc.disabled], esi
		mov	eax, [edx+18h]
		mov	ecx, [eax+3Ch]
		lea	ebx, [ecx+eax]
		add	ecx, 0F8h
		cmp	[edx+14h], esi
		jb	short loc_A253DE
		ja	short loc_A253D2
		cmp	[edx+10h], ecx
		jb	short loc_A253DE

loc_A253D2:				; CODE XREF: AslpFileGetImageNtHeader(x,x)+4Ej
		cmp	[edx+1Ch], ecx
		jb	short loc_A253DE
		mov	[edi], ebx
		mov	[ebp+var_1C], esi
		jmp	short loc_A25421
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A253DE:				; CODE XREF: AslpFileGetImageNtHeader(x,x)+4Cj
					; AslpFileGetImageNtHeader(x,x)+53j ...
		mov	esi, 0C000007Bh
		push	esi
		push	offset ??_C@_0BK@JBDFECNJ@File?5mapping?5invalid?5?$FL?$CFx?$FN@NNGAKEGL@
		push	0F5Ch
		jmp	short loc_A2540F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A253F0:				; DATA XREF: .text:006AADB4o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_20], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A253FE:				; DATA XREF: .text:006AADB8o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_20]
		push	esi
		push	(offset	loc_8C4D43+3)
		push	0F65h

loc_A2540F:				; CODE XREF: AslpFileGetImageNtHeader(x,x)+71j
		push	offset ??_C@_0BJ@PNILLELB@AslpFileGetImageNtHeader@NNGAKEGL@
		push	1
		mov	[ebp+var_1C], esi
		call	AslLogCallPrintf
		add	esp, 14h

loc_A25421:				; CODE XREF: AslpFileGetImageNtHeader(x,x)+5Fj
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh

loc_A25428:				; CODE XREF: AslpFileGetImageNtHeader(x,x)+33j
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetImageNtHeader@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslpFileGetModuleType(x, x)
_AslpFileGetModuleType@8 proc near	; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+1BDp
		mov	eax, [edx+28h]
		sub	eax, 4
		jz	short loc_A25461
		sub	eax, 1
		jz	short loc_A25459
		sub	eax, 1
		jz	short loc_A25451
		and	dword ptr [ecx], 0
		jmp	short loc_A25467
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25451:				; CODE XREF: AslpFileGetModuleType(x,x)+10j
		mov	dword ptr [ecx], 3
		jmp	short loc_A25467
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25459:				; CODE XREF: AslpFileGetModuleType(x,x)+Bj
		mov	dword ptr [ecx], 2
		jmp	short loc_A25467
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25461:				; CODE XREF: AslpFileGetModuleType(x,x)+6j
		mov	dword ptr [ecx], 1

loc_A25467:				; CODE XREF: AslpFileGetModuleType(x,x)+15j
					; AslpFileGetModuleType(x,x)+1Dj ...
		xor	eax, eax
		retn
_AslpFileGetModuleType@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetPeExportNameExeWrapper(x, x)
_AslpFileGetPeExportNameExeWrapper@8 proc near
					; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+246p
					; AslFileAllocAndGetAttributes(x,x,x,x)+265p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		mov	ebx, edx
		xor	eax, eax
		mov	esi, ecx
		mov	[ebp+var_8], eax
		push	edi
		mov	ecx, ebx
		mov	[ebp+var_4], eax
		call	_AslFileMappingEnsure@4	; AslFileMappingEnsure(x)
		mov	edi, eax
		test	edi, edi
		jns	short loc_A254AD
		push	edi
		push	offset ??_C@_0CB@GHEHFDAF@AslFileMappingEnsure?5failed?5?$FL?$CFx@NNGAKEGL@
		push	0CE6h

loc_A25499:				; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+C6j
		push	offset ??_C@_0CC@HPCEKKIJ@AslpFileGetPeExportNameExeWrapp@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A2557C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A254AD:				; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+22j
		cmp	dword ptr [ebx+28h], 6
		jz	short loc_A254C8
		or	dword ptr [esi+268h], 2
		or	dword ptr [esi+238h], 2
		xor	edi, edi
		jmp	loc_A2557C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A254C8:				; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+47j
		mov	edx, ebx
		lea	ecx, [ebp+var_8]
		call	_AslpFileGetExeWrapper@8 ; AslpFileGetExeWrapper(x,x)
		xor	edi, edi
		test	eax, eax
		js	short loc_A25500
		mov	eax, [ebp+var_8]
		mov	[esi+260h], eax
		xor	eax, eax
		mov	dword ptr [esi+258h], 2
		inc	eax
		mov	dword ptr [esi+25Ch], 4
		mov	[esi+264h], edi
		jmp	short loc_A25503
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25500:				; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+6Cj
		push	2
		pop	eax

loc_A25503:				; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+94j
		or	[esi+268h], eax
		lea	ecx, [ebp+var_4]
		mov	edx, ebx
		call	_AslpFileGetExportName@8 ; AslpFileGetExportName(x,x)
		test	eax, eax
		js	short loc_A25575
		mov	ecx, [ebp+var_4]
		call	_AslStringXmlSanitize@4	; AslStringXmlSanitize(x)
		mov	edi, eax
		test	edi, edi
		jns	short loc_A25535
		push	edi
		push	offset ??_C@_0CB@KOMIGNHG@AslStringXmlSanitize?5failed?5?$FL?$CFx@NNGAKEGL@
		push	0D09h
		jmp	loc_A25499
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25535:				; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+B9j
		mov	edx, [ebp+var_4]
		xor	edi, edi
		mov	dword ptr [esi+228h], 4
		lea	eax, [edx+2]

loc_A25547:				; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+E6j
		mov	cx, [edx]
		add	edx, 2
		cmp	cx, di
		jnz	short loc_A25547
		sub	edx, eax
		mov	eax, [ebp+var_4]
		sar	edx, 1
		or	dword ptr [esi+238h], 5
		mov	[esi+22Ch], edx
		cdq
		mov	[esi+230h], eax
		mov	[esi+234h], edx
		jmp	short loc_A2557C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25575:				; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+ABj
		or	dword ptr [esi+238h], 2

loc_A2557C:				; CODE XREF: AslpFileGetPeExportNameExeWrapper(x,x)+3Ej
					; AslpFileGetPeExportNameExeWrapper(x,x)+59j ...
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetPeExportNameExeWrapper@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslpFileGetSizeAttributes(x, x)
_AslpFileGetSizeAttributes@8 proc near	; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+15Ap
		mov	eax, [edx+0Ch]
		push	esi
		mov	esi, [edx+8]
		or	dword ptr [ecx+310h], 1
		and	dword ptr [ecx+0Ch], 0
		or	dword ptr [ecx+10h], 1
		mov	[ecx+308h], esi
		mov	[ecx+30Ch], eax
		xor	eax, eax
		mov	[ecx+8], esi
		mov	dword ptr [ecx+300h], 3
		mov	dword ptr [ecx+304h], 8
		mov	dword ptr [ecx], 2
		mov	dword ptr [ecx+4], 4
		pop	esi
		retn
_AslpFileGetSizeAttributes@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetVersionAttributes(x, x)
_AslpFileGetVersionAttributes@8	proc near
					; CODE XREF: AslFileAllocAndGetAttributes(x,x,x,x)+17Dp

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		and	[ebp+var_4], 0
		and	[ebp+var_8], 0
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+var_4]
		push	edx
		lea	edx, [ebp+var_8]
		call	_AslpFileGetVersionBlock@12 ; AslpFileGetVersionBlock(x,x,x)
		mov	ecx, eax
		mov	ebx, (offset loc_8C5747+1)
		test	ecx, ecx
		jns	short loc_A2561E
		call	_AslFileResourceNotFound@4 ; AslFileResourceNotFound(x)
		test	eax, eax
		jnz	short loc_A25618
		push	ecx
		push	(offset	loc_8C5795+1)
		push	604h
		push	ebx
		push	3
		call	AslLogCallPrintf
		add	esp, 14h

loc_A25618:				; CODE XREF: AslpFileGetVersionAttributes(x,x)+33j
		xor	esi, esi
		xor	edx, edx
		jmp	short loc_A25624
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2561E:				; CODE XREF: AslpFileGetVersionAttributes(x,x)+2Aj
		mov	esi, [ebp+var_4]
		mov	edx, [ebp+var_8]

loc_A25624:				; CODE XREF: AslpFileGetVersionAttributes(x,x)+4Fj
		mov	ecx, edi
		call	_AslpFileMakeBinVersionAttributes@8 ; AslpFileMakeBinVersionAttributes(x,x)
		mov	edx, esi
		mov	ecx, edi
		call	_AslpFileMakeStringVersionAttributes@8 ; AslpFileMakeStringVersionAttributes(x,x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A25652
		push	esi
		push	offset ??_C@_0DA@JAHKPBMF@AslpFileMakeStringVersionAttrib@NNGAKEGL@
		push	61Ch
		push	ebx
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A25654
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25652:				; CODE XREF: AslpFileGetVersionAttributes(x,x)+6Bj
		xor	esi, esi

loc_A25654:				; CODE XREF: AslpFileGetVersionAttributes(x,x)+83j
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileGetVersionAttributes@8	endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileGetVersionBlock(x, x, x)
_AslpFileGetVersionBlock@12 proc near	; CODE XREF: AslpFileGetVersionAttributes(x,x)+1Cp

var_194		= dword	ptr -194h
var_190		= dword	ptr -190h
var_18C		= dword	ptr -18Ch
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_58		= byte ptr -58h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	184h
		push	offset dword_6AAD80
		call	__SEH_prolog4
		mov	[ebp+var_3C], edx
		mov	esi, ecx
		mov	[ebp+var_40], esi
		xor	eax, eax
		mov	[ebp+var_2C], eax
		mov	[ebp+var_28], eax
		mov	ebx, eax
		mov	[ebp+var_30], ebx
		mov	[ebp+var_24], eax
		push	8
		pop	ecx
		lea	edi, [ebp+var_74]
		rep stosd
		mov	edi, [ebp+arg_0]
		mov	eax, [edi+2Ch]
		test	eax, eax
		jz	short loc_A256B2
		lea	ecx, [eax+28h]
		cmp	word ptr [eax+2], 34h
		sbb	eax, eax
		not	eax
		and	eax, ecx
		mov	[edx], eax
		mov	eax, [edi+2Ch]
		mov	[esi], eax
		xor	edx, edx
		mov	esi, edx
		jmp	loc_A25A4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A256B2:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+37j
		mov	ecx, edi
		call	_AslFileMappingEnsure@4	; AslFileMappingEnsure(x)
		mov	esi, eax
		test	esi, esi
		jns	short loc_A256DE
		push	esi
		push	offset ??_C@_0CB@GHEHFDAF@AslFileMappingEnsure?5failed?5?$FL?$CFx@NNGAKEGL@
		push	66Ah
		push	(offset	loc_8C5897+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A25A4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A256DE:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+62j
		cmp	dword ptr [edi+28h], 6
		jz	short loc_A256EE
		mov	esi, 0C0000089h
		jmp	loc_A25A4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A256EE:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+87j
		xor	edx, edx
		mov	[ebp+ms_exc.disabled], edx
		mov	[ebp+var_50], 10h
		mov	[ebp+var_4C], 1
		mov	[ebp+var_48], edx
		mov	eax, [edi+18h]
		mov	[ebp+var_34], eax
		mov	ecx, [edi+1Ch]
		mov	[ebp+var_38], ecx
		cmp	[edi+27h], dl
		mov	ecx, edx
		jnz	short loc_A2571C
		mov	ecx, 200h

loc_A2571C:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+BAj
		push	edx
		push	edx
		lea	edx, [ebp+var_24]
		push	edx
		lea	edx, [ebp+var_28]
		push	edx
		push	ecx
		push	3
		lea	ecx, [ebp+var_50]
		push	ecx
		push	eax
		call	_LdrResSearchResource@32 ; LdrResSearchResource(x,x,x,x,x,x,x,x)
		mov	esi, eax
		mov	[ebp+var_20], esi
		test	esi, esi
		jns	loc_A2589B
		mov	ecx, esi
		call	_AslFileResourceNotFound@4 ; AslFileResourceNotFound(x)
		test	eax, eax
		jnz	loc_A25A06
		cmp	esi, 0C000007Bh
		jnz	loc_A258C0
		cmp	[edi+27h], al
		jnz	loc_A258C0
		xor	edx, edx
		cmp	[edi+34h], edx
		jnz	loc_A258C0
		mov	esi, 11Ch
		push	esi		; size_t
		push	edx		; int
		lea	eax, [ebp+var_194]
		push	eax		; void *
		call	_memset
		add	esp, 0Ch
		mov	[ebp+var_194], esi
		mov	[ebp+var_190], 6
		push	2
		pop	eax
		mov	[ebp+var_18C], eax
		push	3
		push	1
		push	3
		push	eax
		xor	eax, eax
		push	eax
		push	eax
		call	_VerSetConditionMask@16	; VerSetConditionMask(x,x,x,x)
		push	edx
		push	eax
		call	_VerSetConditionMask@16	; VerSetConditionMask(x,x,x,x)
		push	edx
		push	eax
		push	3
		lea	eax, [ebp+var_194]
		push	eax
		call	RtlVerifyVersionInfo
		mov	[ebp+var_20], eax
		test	eax, eax
		jns	short loc_A257D9

loc_A257CC:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+260j
		mov	esi, 0C0000089h

loc_A257D1:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+374j
		mov	[ebp+var_20], esi
		jmp	loc_A25A06
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A257D9:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+16Fj
		mov	eax, [edi+8]
		xor	edx, edx
		mov	[ebp+var_58], dl
		mov	[ebp+var_74], eax
		mov	[ebp+var_20], edx
		mov	dl, 1
		lea	ecx, [ebp+var_74]
		call	_RtlFileMapMapView@8 ; RtlFileMapMapView(x,x)
		mov	esi, eax
		mov	[ebp+var_20], esi
		test	esi, esi
		jns	short loc_A25819
		push	esi
		push	(offset	loc_8C58AE+2)
		push	6C6h

loc_A25805:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+235j
		push	(offset	loc_8C5897+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A25A06
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25819:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+19Dj
		push	dword ptr [edi]
		push	offset ??_C@_0DC@DPKBOOEO@Re?9mapped?5file?5as?5image?5to?5get?5@NNGAKEGL@
		push	6CFh
		push	(offset	loc_8C5897+1)
		push	3
		call	AslLogCallPrintf
		add	esp, 14h
		xor	ecx, ecx
		push	ecx
		push	ecx
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		push	ecx
		push	3
		lea	eax, [ebp+var_50]
		push	eax
		mov	eax, [ebp+var_64]
		mov	[ebp+var_34], eax
		push	eax
		call	_LdrResSearchResource@32 ; LdrResSearchResource(x,x,x,x,x,x,x,x)
		mov	esi, eax
		mov	[ebp+var_20], esi
		test	esi, esi
		mov	eax, (offset loc_8C5887+5)
		jns	short loc_A25866
		mov	eax, offset ??_C@_1BK@GKLIJHC@?$AAD?$AAi?$AAd?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAf?$AAi?$AAn?$AAd@NNGAKEGL@

loc_A25866:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+204j
		push	esi
		push	eax
		push	offset ??_C@_0DB@HCBHNBKL@?$CFls?5version?5block?5after?5re?9mapp@NNGAKEGL@ ; "%ls version block after re-mapping as i"...
		push	6DCh
		push	(offset	loc_8C5897+1)
		push	2
		call	AslLogCallPrintf
		add	esp, 18h
		test	esi, esi
		jns	short loc_A25895
		push	esi
		push	offset ??_C@_0BP@PMJGBMEO@LdrResFindResource?5failed?5?$FL?$CFx?$FN@NNGAKEGL@
		push	6DFh
		jmp	loc_A25805
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25895:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+228j
		mov	eax, [ebp+var_60]
		mov	[ebp+var_38], eax

loc_A2589B:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+DFj
		cmp	[ebp+var_28], 0
		jnz	short loc_A258E1
		push	esi
		push	offset ??_C@_0EB@PANFBJOL@LdrResFindResource?5returned?5nul@NNGAKEGL@
		push	6EEh
		push	(offset	loc_8C5897+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	loc_A257CC
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A258C0:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+FAj
					; AslpFileGetVersionBlock(x,x,x)+103j ...
		push	esi
		push	dword ptr [edi]
		push	offset ??_C@_0CD@MLDHNGPC@LdrResFindResource?5failed?5?$CFls?5?$FL@NNGAKEGL@
		push	6E7h
		push	(offset	loc_8C5897+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 18h
		jmp	loc_A25A06
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A258E1:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+244j
		lea	eax, [ebp+var_2C]
		push	eax
		mov	edx, [ebp+var_24]
		mov	esi, [ebp+var_28]
		mov	ecx, esi
		call	_RtlULongPtrAdd@12 ; RtlULongPtrAdd(x,x,x)
		mov	[ebp+var_20], eax
		test	eax, eax
		jns	short loc_A25908
		push	offset ??_C@_0BL@MHNFPBOP@Version?5block?5has?5bad?5size@NNGAKEGL@
		push	6FCh
		jmp	loc_A259EF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25908:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+29Cj
		mov	ecx, [ebp+var_34]
		cmp	esi, ecx
		jb	loc_A259E5
		mov	eax, [ebp+var_38]
		add	eax, ecx
		cmp	[ebp+var_2C], eax
		ja	loc_A259E5
		cmp	byte ptr [edi+27h], 0
		jnz	short loc_A25951
		cmp	[ebp+var_70], 0
		jnz	short loc_A25951
		xor	eax, eax
		add	ecx, [edi+10h]
		adc	eax, [edi+14h]
		xor	edx, edx
		cmp	edx, eax
		jb	short loc_A25951
		ja	short loc_A25942
		cmp	[ebp+var_2C], ecx
		jbe	short loc_A25951

loc_A25942:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+2E0j
		push	offset ??_C@_0BL@FACOOBH@Version?5block?5out?5of?5range@NNGAKEGL@
		push	71Ah
		jmp	loc_A259EF
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25951:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+2CAj
					; AslpFileGetVersionBlock(x,x,x)+2D0j ...
		cmp	[ebp+var_24], 26h
		jb	short loc_A259D4
		push	offset ??_C@_1CA@FOECMPGO@?$AAV?$AAS?$AA_?$AAV?$AAE?$AAR?$AAS?$AAI?$AAO?$AAN?$AA_?$AAI?$AAN?$AAF?$AAO@NNGAKEGL@	; wchar_t *
		lea	eax, [esi+6]
		push	eax		; wchar_t *
		call	__wcsicmp
		pop	ecx
		pop	ecx
		test	eax, eax
		jnz	short loc_A259D4
		push	ecx
		mov	edx, [ebp+var_24]
		call	_AslAlloc@12	; AslAlloc(x,x,x)
		mov	ebx, eax
		mov	[ebp+var_30], ebx
		test	ebx, ebx
		jnz	short loc_A2598E
		mov	esi, 0C0000017h
		push	offset ??_C@_0O@NALGGDJF@Out?5of?5memory@NNGAKEGL@
		push	730h
		jmp	short loc_A259F4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A2598E:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+320j
		push	[ebp+var_24]	; size_t
		push	[ebp+var_28]	; void *
		push	ebx		; void *
		call	_memmove
		add	esp, 0Ch
		movzx	eax, word ptr [ebx]
		mov	ecx, [ebp+var_24]
		cmp	ecx, eax
		jnb	short loc_A259AA
		mov	[ebx], cx

loc_A259AA:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+34Aj
		mov	[edi+2Ch], ebx
		xor	eax, eax
		mov	ebx, eax
		mov	[ebp+var_30], ebx
		mov	ecx, [edi+2Ch]
		mov	edx, [ebp+var_3C]
		cmp	word ptr [ecx+2], 34h
		jb	short loc_A259C4
		lea	eax, [ecx+28h]

loc_A259C4:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+364j
		mov	[edx], eax
		mov	eax, [ebp+var_40]
		mov	[eax], ecx
		xor	edx, edx
		mov	esi, edx
		jmp	loc_A257D1
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A259D4:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+2FAj
					; AslpFileGetVersionBlock(x,x,x)+30Ej
		mov	esi, 0C00000E5h
		push	offset ??_C@_0BG@NGDGBFBB@Version?5block?5invalid@NNGAKEGL@ ; "Version block invalid"
		push	725h
		jmp	short loc_A259F4
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A259E5:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+2B2j
					; AslpFileGetVersionBlock(x,x,x)+2C0j
		push	offset ??_C@_0BL@FACOOBH@Version?5block?5out?5of?5range@NNGAKEGL@
		push	708h

loc_A259EF:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+2A8j
					; AslpFileGetVersionBlock(x,x,x)+2F1j
		mov	esi, 0C0000089h

loc_A259F4:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+331j
					; AslpFileGetVersionBlock(x,x,x)+388j
		push	(offset	loc_8C5897+1)
		push	1
		mov	[ebp+var_20], esi
		call	AslLogCallPrintf
		add	esp, 10h

loc_A25A06:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+EEj
					; AslpFileGetVersionBlock(x,x,x)+179j ...
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A25A4F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25A0F:				; DATA XREF: .text:006AAD94o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_44], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25A1D:				; DATA XREF: .text:006AAD98o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_44]
		mov	[ebp+var_20], esi
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax]
		push	esi
		push	offset ??_C@_0DC@KHINOBN@Exception?5retrieving?5version?5bl@NNGAKEGL@
		push	756h
		push	(offset	loc_8C5897+1)
		push	1
		call	AslLogCallPrintf
		add	esp, 18h
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		mov	ebx, [ebp+var_30]

loc_A25A4F:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+52j
					; AslpFileGetVersionBlock(x,x,x)+7Ej ...
		test	ebx, ebx
		jz	short loc_A25A5E
		push	74705041h
		push	ebx
		call	_ExFreePoolWithTag@8 ; ExFreePoolWithTag(x,x)

loc_A25A5E:				; CODE XREF: AslpFileGetVersionBlock(x,x,x)+3F6j
		lea	ecx, [ebp+var_74]
		call	RtlFileMapFree
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
_AslpFileGetVersionBlock@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileHasActiveMarkWrapper(x, x, x)
_AslpFileHasActiveMarkWrapper@12 proc near ; CODE XREF:	AslpFileGetExeWrapper(x,x)+7Dp

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h
arg_0		= dword	ptr  8

		push	1Ch
		push	offset dword_6AAD20
		call	__SEH_prolog4
		mov	[ebp+var_1C], edx
		mov	eax, ecx
		mov	[ebp+var_24], eax
		xor	esi, esi
		mov	edi, esi
		mov	[eax], esi
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebx+1Ch]
		mov	edx, [ebx+10h]
		mov	eax, [ebx+14h]
		cmp	eax, esi
		ja	short loc_A25AAA
		jb	short loc_A25AB2
		cmp	edx, ecx
		jb	short loc_A25AAE

loc_A25AAA:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+28j
		mov	edx, ecx
		mov	eax, esi

loc_A25AAE:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+2Ej
		cmp	eax, esi
		ja	short loc_A25ABE

loc_A25AB2:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+2Aj
		cmp	edx, 400h
		jbe	loc_A25BDB

loc_A25ABE:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+36j
		xor	ecx, ecx
		inc	ecx
		cmp	eax, ecx
		ja	loc_A25BDB
		jb	short loc_A25AD3
		cmp	edx, esi
		jnb	loc_A25BDB

loc_A25AD3:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+4Fj
		cmp	[ebx+34h], esi
		jnz	loc_A25BDB
		cmp	[ebx+30h], esi
		jnz	loc_A25BDB
		mov	[ebp+ms_exc.disabled], esi
		mov	ecx, [ebp+var_1C]
		movzx	ecx, word ptr [ecx+18h]
		mov	[ebp+arg_0], 10Bh
		cmp	cx, word ptr [ebp+arg_0]
		jnz	short loc_A25B07
		mov	edi, [ebp+var_1C]
		add	edi, 98h
		jmp	short loc_A25B1D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25B07:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+80j
		mov	[ebp+arg_0], 20Bh
		cmp	cx, word ptr [ebp+arg_0]
		jnz	short loc_A25B1D
		mov	edi, [ebp+var_1C]
		add	edi, 0A8h

loc_A25B1D:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+8Bj
					; AslpFileHasActiveMarkWrapper(x,x,x)+98j
		test	edi, edi
		jz	short loc_A25B97
		mov	ecx, [edi+4]
		lea	edi, [ecx+400h]
		cmp	eax, esi
		jb	short loc_A25B97
		ja	short loc_A25B34
		cmp	edx, edi
		jbe	short loc_A25B97

loc_A25B34:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+B4j
		mov	eax, [ebx+18h]
		sub	eax, ecx
		lea	ebx, [edx-400h]
		add	ebx, eax
		lea	edi, [ebx+3E6h]

loc_A25B47:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+11Bj
		mov	[ebp+var_28], edi
		cmp	edi, ebx
		jb	short loc_A25B9C
		push	8		; size_t
		push	offset aTmsamvof ; "TMSAMVOF"
		push	edi		; void *
		call	_memcmp
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_A25B94
		inc	eax
		cmp	ax, [edi+8]
		jnz	short loc_A25B94
		mov	ecx, [edi+12h]
		xor	edx, edx
		add	ecx, [edi+0Eh]
		adc	edx, esi
		add	ecx, [edi+0Ah]
		adc	edx, esi
		add	ecx, 26Eh
		adc	edx, esi
		cmp	ecx, [edi+16h]
		jnz	short loc_A25B94
		cmp	edx, esi
		jnz	short loc_A25B94
		mov	eax, [ebp+var_24]
		mov	dword ptr [eax], 1
		jmp	short loc_A25B9C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25B94:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+E6j
					; AslpFileHasActiveMarkWrapper(x,x,x)+EDj ...
		dec	edi
		jmp	short loc_A25B47
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25B97:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+A5j
					; AslpFileHasActiveMarkWrapper(x,x,x)+B2j ...
		mov	esi, 0C0000225h

loc_A25B9C:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+D2j
					; AslpFileHasActiveMarkWrapper(x,x,x)+118j
		mov	[ebp+var_20], esi

loc_A25B9F:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+15Fj
		mov	[ebp+ms_exc.disabled], 0FFFFFFFEh
		jmp	short loc_A25BE0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25BA8:				; DATA XREF: .text:006AAD34o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_2C], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25BB6:				; DATA XREF: .text:006AAD38o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	esi, [ebp+var_2C]
		mov	[ebp+var_20], esi
		push	esi
		push	(offset	loc_8C4D43+3)
		push	106Dh
		push	offset ??_C@_0BN@JELEGGGH@AslpFileHasActiveMarkWrapper@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h
		jmp	short loc_A25B9F
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25BDB:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+3Ej
					; AslpFileHasActiveMarkWrapper(x,x,x)+49j ...
		mov	esi, 0C0000225h

loc_A25BE0:				; CODE XREF: AslpFileHasActiveMarkWrapper(x,x,x)+12Cj
		mov	eax, esi
		mov	ecx, [ebp+ms_exc.prev_er]
		mov	large fs:0, ecx
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
_AslpFileHasActiveMarkWrapper@12 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslpFileHasArmadilloWrapper(x)
_AslpFileHasArmadilloWrapper@4 proc near ; CODE	XREF: AslpFileGetExeWrapper(x,x)+D4p
		cmp	dword ptr [ecx], 4550h
		jnz	short loc_A25C0C
		cmp	byte ptr [ecx+1Ah], 53h
		jnz	short loc_A25C0C
		cmp	byte ptr [ecx+1Bh], 52h
		jnz	short loc_A25C0C
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25C0C:				; CODE XREF: AslpFileHasArmadilloWrapper(x)+6j
					; AslpFileHasArmadilloWrapper(x)+Cj ...
		xor	eax, eax
		retn
_AslpFileHasArmadilloWrapper@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileHasSecuromWrapper(x)
_AslpFileHasSecuromWrapper@4 proc near	; CODE XREF: AslpFileGetExeWrapper(x,x)+62p

var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		push	ecx
		movzx	eax, word ptr [ecx+14h]
		push	ebx
		push	esi
		push	edi
		lea	edi, [ecx+18h]
		mov	[ebp+var_4], ecx
		add	edi, eax
		xor	esi, esi
		xor	eax, eax
		mov	ebx, esi
		cmp	ax, [ecx+6]
		jnb	short loc_A25C62

loc_A25C30:				; CODE XREF: AslpFileHasSecuromWrapper(x)+4Cj
		cmp	[edi+0Ch], esi
		jz	short loc_A25C51
		cmp	[edi+8], esi
		jz	short loc_A25C51
		push	8		; size_t
		push	offset ??_C@_08EFCIKEPK@?4securom@NNGAKEGL@ ; char *
		push	edi		; char *
		call	_strncmp
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_A25C5F
		mov	ecx, [ebp+var_4]

loc_A25C51:				; CODE XREF: AslpFileHasSecuromWrapper(x)+24j
					; AslpFileHasSecuromWrapper(x)+29j
		movzx	eax, word ptr [ecx+6]
		inc	ebx
		add	edi, 28h
		cmp	ebx, eax
		jb	short loc_A25C30
		jmp	short loc_A25C62
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25C5F:				; CODE XREF: AslpFileHasSecuromWrapper(x)+3Dj
		xor	esi, esi
		inc	esi

loc_A25C62:				; CODE XREF: AslpFileHasSecuromWrapper(x)+1Fj
					; AslpFileHasSecuromWrapper(x)+4Ej
		pop	edi
		mov	eax, esi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileHasSecuromWrapper@4 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


; __stdcall AslpFileMakeBinVersionAttributes(x,	x)
_AslpFileMakeBinVersionAttributes@8 proc near
					; CODE XREF: AslpFileGetVersionAttributes(x,x)+59p
		mov	edi, edi
		push	esi
		mov	esi, ecx
		test	edx, edx
		jnz	short loc_A25C95
		push	2
		pop	ecx
		or	[esi+148h], ecx
		or	[esi+160h], ecx
		or	[esi+178h], ecx
		or	[esi+190h], ecx
		or	[esi+70h], ecx
		or	[esi+58h], ecx
		pop	esi
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25C95:				; CODE XREF: AslpFileMakeBinVersionAttributes(x,x)+7j
		push	ebx
		push	edi
		push	2
		pop	ecx
		push	4
		pop	ebx
		mov	[esi+13Ch], ebx
		xor	edi, edi
		mov	[esi+138h], ecx
		mov	eax, [edx+2Ch]
		or	dword ptr [esi+148h], 1
		mov	[esi+144h], edi
		mov	[esi+154h], ebx
		mov	[esi+140h], eax
		mov	[esi+150h], ecx
		mov	eax, [edx+30h]
		or	dword ptr [esi+160h], 1
		mov	[esi+15Ch], edi
		mov	[esi+16Ch], ebx
		mov	[esi+158h], eax
		mov	[esi+168h], ecx
		mov	eax, [edx+20h]
		or	dword ptr [esi+178h], 1
		mov	[esi+184h], ebx
		push	3
		mov	[esi+174h], edi
		pop	ebx
		mov	[esi+170h], eax
		mov	[esi+180h], ecx
		mov	eax, [edx+24h]
		or	dword ptr [esi+190h], 1
		mov	[esi+18Ch], edi
		push	8
		mov	[esi+188h], eax
		mov	eax, [edx+14h]
		mov	ecx, [edx+10h]
		or	dword ptr [esi+70h], 1
		pop	edi
		mov	[esi+60h], ebx
		mov	[esi+64h], edi
		mov	[esi+68h], eax
		mov	[esi+6Ch], ecx
		mov	eax, [edx+0Ch]
		mov	ecx, [edx+8]
		or	dword ptr [esi+58h], 1
		mov	[esi+4Ch], edi
		pop	edi
		mov	[esi+48h], ebx
		pop	ebx
		mov	[esi+50h], eax
		mov	[esi+54h], ecx
		pop	esi
		retn
_AslpFileMakeBinVersionAttributes@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileMakeStringVersionAttributes(x, x)
_AslpFileMakeStringVersionAttributes@8 proc near
					; CODE XREF: AslpFileGetVersionAttributes(x,x)+62p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		mov	edi, edi
		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		xor	ebx, ebx
		mov	eax, edx
		mov	[ebp+var_18], eax
		mov	[ebp+var_20], ebx
		mov	[ebp+var_C], ebx
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_10], ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_14], ebx
		push	esi
		mov	esi, ecx
		push	edi
		test	eax, eax
		jnz	short loc_A25DC9
		push	2
		pop	ebx
		or	[esi+88h], ebx
		or	[esi+0A0h], ebx
		or	[esi+0B8h], ebx
		or	[esi+0D0h], ebx
		or	[esi+0E8h], ebx
		or	[esi+100h], ebx
		or	[esi+118h], ebx
		or	[esi+130h], ebx

loc_A25DBA:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+189j
					; AslpFileMakeStringVersionAttributes(x,x)+193j
		or	[esi+250h], ebx

loc_A25DC0:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+1C0j
		xor	eax, eax
		mov	edi, eax
		jmp	loc_A25F3C
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25DC9:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+28j
		lea	ecx, [ebp+var_8]
		mov	edx, offset ??_C@_1DC@HCLBMGIA@?$AA?2?$AAV?$AAa?$AAr?$AAF?$AAi?$AAl?$AAe?$AAI?$AAn?$AAf?$AAo?$AA?2?$AAT?$AAr@NNGAKEGL@
		push	ecx
		lea	ecx, [ebp+var_10]
		push	ecx
		mov	ecx, eax
		call	_AslpFileVerQueryBlock@16 ; AslpFileVerQueryBlock(x,x,x,x)
		mov	edi, eax
		cmp	edi, 0C0000225h
		jnz	short loc_A25DF0
		mov	eax, ebx
		mov	edi, ebx
		mov	[ebp+var_4], eax
		jmp	short loc_A25E36
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25DF0:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+88j
		test	edi, edi
		jns	short loc_A25E04
		push	edi
		push	offset ??_C@_0CC@NIKDGGIJ@AslpFileVerQueryBlock?5failed?5?$FL?$CF@NNGAKEGL@
		push	0A51h
		jmp	loc_A25F2D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25E04:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+95j
		push	[ebp+var_8]
		mov	[ebp+var_4], ebx
		lea	ecx, [ebp+var_14]
		mov	edi, ebx
		mov	ebx, [ebp+var_10]
		mov	edx, ebx
		call	_AslpFileVerBlockGetValueOffset@12 ; AslpFileVerBlockGetValueOffset(x,x,x)
		test	eax, eax
		js	short loc_A25E32
		mov	ecx, [ebp+var_14]
		cmp	[ebp+var_8], ecx
		jbe	short loc_A25E32
		mov	edi, [ebp+var_8]
		lea	eax, [ecx+ebx]
		mov	[ebp+var_4], eax
		sub	edi, ecx
		jmp	short loc_A25E34
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25E32:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+BEj
					; AslpFileMakeStringVersionAttributes(x,x)+C6j
		mov	eax, edi

loc_A25E34:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+D3j
		xor	ebx, ebx

loc_A25E36:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+91j
		mov	ecx, ebx
		shr	edi, 2
		push	2
		mov	[ebp+var_8], edi
		mov	[ebp+var_10], ecx
		pop	ebx

loc_A25E44:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+175j
		push	ds:off_404204[ecx]
		mov	edx, ds:dword_404200[ecx]
		lea	ecx, [ebp+var_C]
		push	edi
		push	eax
		push	[ebp+var_18]
		mov	[ebp+var_14], edx
		lea	edx, [ebp+var_1C]
		call	_AslpFileQueryVersionString@24 ; AslpFileQueryVersionString(x,x,x,x,x,x)
		mov	edi, eax
		test	edi, edi
		js	short loc_A25EAE
		mov	ecx, [ebp+var_C]
		call	_AslStringXmlSanitize@4	; AslStringXmlSanitize(x)
		mov	edi, eax
		test	edi, edi
		js	short loc_A25ED7
		imul	edi, [ebp+var_14], 18h
		mov	edx, [ebp+var_C]
		lea	eax, [edx+2]
		mov	dword ptr [edi+esi], 4

loc_A25E88:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+134j
		mov	cx, [edx]
		add	edx, ebx
		cmp	cx, word ptr [ebp+var_20]
		jnz	short loc_A25E88
		sub	edx, eax
		mov	eax, [ebp+var_C]
		sar	edx, 1
		or	dword ptr [edi+esi+10h], 1
		mov	[edi+esi+4], edx
		cdq
		mov	[edi+esi+8], eax
		mov	[edi+esi+0Ch], edx
		jmp	short loc_A25EBE
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25EAE:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+10Aj
		cmp	edi, 0C0000225h
		jnz	short loc_A25F22
		imul	eax, [ebp+var_14], 18h
		or	[eax+esi+10h], ebx

loc_A25EBE:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+14Fj
		mov	ecx, [ebp+var_10]
		mov	eax, [ebp+var_4]
		add	ecx, 8
		mov	[ebp+var_10], ecx
		cmp	ecx, 40h
		jnb	short loc_A25EE4
		mov	edi, [ebp+var_8]
		jmp	loc_A25E44
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25ED7:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+118j
		push	edi
		push	offset ??_C@_0CB@KOMIGNHG@AslStringXmlSanitize?5failed?5?$FL?$CFx@NNGAKEGL@
		push	0A7Bh
		jmp	short loc_A25F2D
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25EE4:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+170j
		test	eax, eax
		jz	loc_A25DBA
		cmp	[ebp+var_8], 1
		jnz	loc_A25DBA
		mov	[esi+240h], ebx
		mov	dword ptr [esi+244h], 4
		movzx	eax, word ptr [eax]
		or	dword ptr [esi+250h], 1
		cdq
		mov	[esi+248h], eax
		mov	[esi+24Ch], edx
		jmp	loc_A25DC0
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25F22:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+157j
		push	edi
		push	(offset	loc_8C5B81+3)
		push	0A88h

loc_A25F2D:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+A2j
					; AslpFileMakeStringVersionAttributes(x,x)+185j
		push	offset ??_C@_0CE@OAAMAOIJ@AslpFileMakeStringVersionAttrib@NNGAKEGL@
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A25F3C:				; CODE XREF: AslpFileMakeStringVersionAttributes(x,x)+67j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
_AslpFileMakeStringVersionAttributes@8 endp


; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

; Attributes: bp-based frame

; __stdcall AslpFileQuery16BitDescription(x, x)
_AslpFileQuery16BitDescription@8 proc near ; CODE XREF:	AslpFileGet16BitDescription(x,x)+49p

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
ms_exc		= CPPEH_RECORD ptr -18h

		push	20h
		push	offset dword_6AACE0
		call	__SEH_prolog4
		mov	edi, ecx
		xor	ebx, ebx
		mov	[edi], bl
		cmp	dword ptr [edx+28h], 5
		jz	short loc_A25F65
		mov	ebx, 0C00000BBh
		jmp	loc_A26051
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25F65:				; CODE XREF: AslpFileQuery16BitDescription(x,x)+16j
		mov	[ebp+ms_exc.disabled], ebx
		mov	esi, [edx+18h]
		mov	[ebp+var_24], esi
		mov	eax, [esi+3Ch]
		mov	[ebp+var_28], eax
		mov	eax, [edx+10h]
		mov	[ebp+var_2C], eax
		mov	ecx, [edx+14h]
		mov	[ebp+var_20], ecx
		mov	edx, [ebp+var_28]
		cmp	ecx, ebx
		jb	short loc_A25FF6
		ja	short loc_A25F90
		lea	ecx, [edx+40h]
		cmp	eax, ecx
		jb	short loc_A25FF6

loc_A25F90:				; CODE XREF: AslpFileQuery16BitDescription(x,x)+44j
		mov	ecx, [edx+esi+2Ch]
		lea	edx, [ecx+1]
		cmp	[ebp+var_20], ebx
		jb	short loc_A25FF6
		ja	short loc_A25FA2
		cmp	eax, edx
		jb	short loc_A25FF6

loc_A25FA2:				; CODE XREF: AslpFileQuery16BitDescription(x,x)+59j
		movzx	esi, byte ptr [ecx+esi]
		test	esi, esi
		jz	short loc_A25FEA
		lea	eax, [esi+1]
		cmp	eax, 100h
		ja	short loc_A25FEA
		lea	eax, [ecx+1]
		add	eax, esi
		cmp	[ebp+var_20], ebx
		ja	short loc_A25FD1
		jb	short loc_A25FC5
		cmp	[ebp+var_2C], eax
		jnb	short loc_A25FD1

loc_A25FC5:				; CODE XREF: AslpFileQuery16BitDescription(x,x)+7Bj
		push	(offset	loc_8C5FF9+3)
		push	123Ch
		jmp	short loc_A26000
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25FD1:				; CODE XREF: AslpFileQuery16BitDescription(x,x)+79j
					; AslpFileQuery16BitDescription(x,x)+80j
		push	esi		; size_t
		mov	eax, [ebp+var_24]
		inc	eax
		add	eax, ecx
		push	eax		; void *
		push	edi		; void *
		call	_memcpy
		add	esp, 0Ch
		mov	[esi+edi], bl
		mov	[ebp+var_1C], ebx
		jmp	short loc_A2604A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25FEA:				; CODE XREF: AslpFileQuery16BitDescription(x,x)+65j
					; AslpFileQuery16BitDescription(x,x)+6Fj
		push	(offset	loc_8C5FF9+3)
		push	1236h
		jmp	short loc_A26000
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A25FF6:				; CODE XREF: AslpFileQuery16BitDescription(x,x)+42j
					; AslpFileQuery16BitDescription(x,x)+4Bj ...
		push	(offset	loc_8C5FF9+3)
		push	122Dh

loc_A26000:				; CODE XREF: AslpFileQuery16BitDescription(x,x)+8Cj
					; AslpFileQuery16BitDescription(x,x)+B1j
		push	(offset	loc_8C600E+4)
		mov	ebx, 0C000007Bh
		push	1
		mov	[ebp+var_1C], ebx
		call	AslLogCallPrintf
		add	esp, 10h
		jmp	short loc_A2604A
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A26019:				; DATA XREF: .text:006AACF4o
		mov	eax, [ebp+ms_exc.exc_ptr]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_30], eax
		xor	eax, eax
		inc	eax
		retn
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

loc_A26027:				; DATA XREF: .text:006AACF8o
		mov	esp, [ebp+ms_exc.old_esp]
		mov	ebx, [ebp+var_30]
		mov	[ebp+var_1C], ebx
		push	ebx
		push	(offset	loc_8C4D43+3)
		push	1247h
		push	(offset	loc_8C600E+4)
		push	1
		call	AslLogCallPrintf
		add	esp, 14h

loc_A2604A:				; CODE XREF: AslpFileQuery