; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08 

	TITLE	c:\Develop\DScaler423a\DScaler\HardwareMemory.cpp
	.686P
	.XMM
	include listing.inc
	.model	flat

INCLUDELIB OLDNAMES

PUBLIC	??_R4CContigMemory@@6B@				; CContigMemory::`RTTI Complete Object Locator'
PUBLIC	??_R3CContigMemory@@8				; CContigMemory::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2CContigMemory@@8				; CContigMemory::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@CContigMemory@@8			; CContigMemory::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	??_R0?AVCContigMemory@@@8			; CContigMemory `RTTI Type Descriptor'
PUBLIC	??_R4CUserMemory@@6B@				; CUserMemory::`RTTI Complete Object Locator'
PUBLIC	??_R3CUserMemory@@8				; CUserMemory::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2CUserMemory@@8				; CUserMemory::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@CUserMemory@@8			; CUserMemory::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	??_R0?AVCUserMemory@@@8				; CUserMemory `RTTI Type Descriptor'
PUBLIC	??_R4CHardwareMemory@@6B@			; CHardwareMemory::`RTTI Complete Object Locator'
PUBLIC	??_R3CHardwareMemory@@8				; CHardwareMemory::`RTTI Class Hierarchy Descriptor'
PUBLIC	??_R2CHardwareMemory@@8				; CHardwareMemory::`RTTI Base Class Array'
PUBLIC	??_R1A@?0A@EA@CHardwareMemory@@8		; CHardwareMemory::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC	??_R0?AVCHardwareMemory@@@8			; CHardwareMemory `RTTI Type Descriptor'
PUBLIC	??_GCHardwareMemory@@MAEPAXI@Z			; CHardwareMemory::`scalar deleting destructor'
PUBLIC	??_GCUserMemory@@UAEPAXI@Z			; CUserMemory::`scalar deleting destructor'
PUBLIC	??_GCContigMemory@@UAEPAXI@Z			; CContigMemory::`scalar deleting destructor'
PUBLIC	??_C@_0O@NALGGDJF@Out?5of?5memory?$AA@		; `string'
PUBLIC	??_C@_0BG@HLJBIOAE@Memory?5mapping?5failed?$AA@	; `string'
PUBLIC	??_7CHardwareMemory@@6B@			; CHardwareMemory::`vftable'
PUBLIC	??_7CUserMemory@@6B@				; CUserMemory::`vftable'
PUBLIC	??_7CContigMemory@@6B@				; CContigMemory::`vftable'
PUBLIC	__CTA2?AVruntime_error@std@@
PUBLIC	__TI2?AVruntime_error@std@@
EXTRN	??_ECHardwareMemory@@MAEPAXI@Z:PROC		; CHardwareMemory::`vector deleting destructor'
EXTRN	??_ECUserMemory@@UAEPAXI@Z:PROC			; CUserMemory::`vector deleting destructor'
EXTRN	??_ECContigMemory@@UAEPAXI@Z:PROC		; CContigMemory::`vector deleting destructor'
;	COMDAT __TI2?AVruntime_error@std@@
xdata$x	SEGMENT
__TI2?AVruntime_error@std@@ DD 00H
	DD	FLAT:??1runtime_error@std@@UAE@XZ
	DD	00H
	DD	FLAT:__CTA2?AVruntime_error@std@@
xdata$x	ENDS
;	COMDAT __CTA2?AVruntime_error@std@@
xdata$x	SEGMENT
__CTA2?AVruntime_error@std@@ DD 02H
	DD	FLAT:__CT??_R0?AVruntime_error@std@@@8??0runtime_error@std@@QAE@ABV01@@Z40
	DD	FLAT:__CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12
xdata$x	ENDS
;	COMDAT ??_7CContigMemory@@6B@
CONST	SEGMENT
??_7CContigMemory@@6B@ DD FLAT:??_R4CContigMemory@@6B@	; CContigMemory::`vftable'
	DD	FLAT:??_ECContigMemory@@UAEPAXI@Z
CONST	ENDS
;	COMDAT ??_R4CContigMemory@@6B@
rdata$r	SEGMENT
??_R4CContigMemory@@6B@ DD 00H				; CContigMemory::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AVCContigMemory@@@8
	DD	FLAT:??_R3CContigMemory@@8
rdata$r	ENDS
;	COMDAT ??_R3CContigMemory@@8
rdata$r	SEGMENT
??_R3CContigMemory@@8 DD 00H				; CContigMemory::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	02H
	DD	FLAT:??_R2CContigMemory@@8
rdata$r	ENDS
;	COMDAT ??_R2CContigMemory@@8
rdata$r	SEGMENT
??_R2CContigMemory@@8 DD FLAT:??_R1A@?0A@EA@CContigMemory@@8 ; CContigMemory::`RTTI Base Class Array'
	DD	FLAT:??_R1A@?0A@EA@CHardwareMemory@@8
rdata$r	ENDS
;	COMDAT ??_R1A@?0A@EA@CContigMemory@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@CContigMemory@@8 DD FLAT:??_R0?AVCContigMemory@@@8 ; CContigMemory::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	01H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3CContigMemory@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVCContigMemory@@@8
_DATA	SEGMENT
??_R0?AVCContigMemory@@@8 DD FLAT:??_7type_info@@6B@	; CContigMemory `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVCContigMemory@@', 00H
_DATA	ENDS
;	COMDAT ??_7CUserMemory@@6B@
CONST	SEGMENT
??_7CUserMemory@@6B@ DD FLAT:??_R4CUserMemory@@6B@	; CUserMemory::`vftable'
	DD	FLAT:??_ECUserMemory@@UAEPAXI@Z
CONST	ENDS
;	COMDAT ??_R4CUserMemory@@6B@
rdata$r	SEGMENT
??_R4CUserMemory@@6B@ DD 00H				; CUserMemory::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AVCUserMemory@@@8
	DD	FLAT:??_R3CUserMemory@@8
rdata$r	ENDS
;	COMDAT ??_R3CUserMemory@@8
rdata$r	SEGMENT
??_R3CUserMemory@@8 DD 00H				; CUserMemory::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	02H
	DD	FLAT:??_R2CUserMemory@@8
rdata$r	ENDS
;	COMDAT ??_R2CUserMemory@@8
rdata$r	SEGMENT
??_R2CUserMemory@@8 DD FLAT:??_R1A@?0A@EA@CUserMemory@@8 ; CUserMemory::`RTTI Base Class Array'
	DD	FLAT:??_R1A@?0A@EA@CHardwareMemory@@8
rdata$r	ENDS
;	COMDAT ??_R1A@?0A@EA@CUserMemory@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@CUserMemory@@8 DD FLAT:??_R0?AVCUserMemory@@@8 ; CUserMemory::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	01H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3CUserMemory@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVCUserMemory@@@8
_DATA	SEGMENT
??_R0?AVCUserMemory@@@8 DD FLAT:??_7type_info@@6B@	; CUserMemory `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVCUserMemory@@', 00H
_DATA	ENDS
;	COMDAT ??_7CHardwareMemory@@6B@
CONST	SEGMENT
??_7CHardwareMemory@@6B@ DD FLAT:??_R4CHardwareMemory@@6B@ ; CHardwareMemory::`vftable'
	DD	FLAT:??_ECHardwareMemory@@MAEPAXI@Z
CONST	ENDS
;	COMDAT ??_R4CHardwareMemory@@6B@
rdata$r	SEGMENT
??_R4CHardwareMemory@@6B@ DD 00H			; CHardwareMemory::`RTTI Complete Object Locator'
	DD	00H
	DD	00H
	DD	FLAT:??_R0?AVCHardwareMemory@@@8
	DD	FLAT:??_R3CHardwareMemory@@8
rdata$r	ENDS
;	COMDAT ??_R3CHardwareMemory@@8
rdata$r	SEGMENT
??_R3CHardwareMemory@@8 DD 00H				; CHardwareMemory::`RTTI Class Hierarchy Descriptor'
	DD	00H
	DD	01H
	DD	FLAT:??_R2CHardwareMemory@@8
rdata$r	ENDS
;	COMDAT ??_R2CHardwareMemory@@8
rdata$r	SEGMENT
??_R2CHardwareMemory@@8 DD FLAT:??_R1A@?0A@EA@CHardwareMemory@@8 ; CHardwareMemory::`RTTI Base Class Array'
rdata$r	ENDS
;	COMDAT ??_R1A@?0A@EA@CHardwareMemory@@8
rdata$r	SEGMENT
??_R1A@?0A@EA@CHardwareMemory@@8 DD FLAT:??_R0?AVCHardwareMemory@@@8 ; CHardwareMemory::`RTTI Base Class Descriptor at (0,-1,0,64)'
	DD	00H
	DD	00H
	DD	0ffffffffH
	DD	00H
	DD	040H
	DD	FLAT:??_R3CHardwareMemory@@8
rdata$r	ENDS
;	COMDAT ??_R0?AVCHardwareMemory@@@8
_DATA	SEGMENT
??_R0?AVCHardwareMemory@@@8 DD FLAT:??_7type_info@@6B@	; CHardwareMemory `RTTI Type Descriptor'
	DD	00H
	DB	'.?AVCHardwareMemory@@', 00H
_DATA	ENDS
;	COMDAT ??_C@_0BG@HLJBIOAE@Memory?5mapping?5failed?$AA@
CONST	SEGMENT
??_C@_0BG@HLJBIOAE@Memory?5mapping?5failed?$AA@ DB 'Memory mapping failed'
	DB	00H						; `string'
CONST	ENDS
;	COMDAT ??_C@_0O@NALGGDJF@Out?5of?5memory?$AA@
CONST	SEGMENT
??_C@_0O@NALGGDJF@Out?5of?5memory?$AA@ DB 'Out of memory', 00H ; `string'
PUBLIC	?IsValid@CHardwareMemory@@QAEHXZ		; CHardwareMemory::IsValid
; Function compile flags: /Odtp
; File c:\develop\dscaler423a\dscaler\hardwarememory.cpp
;	COMDAT ?IsValid@CHardwareMemory@@QAEHXZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
?IsValid@CHardwareMemory@@QAEHXZ PROC			; CHardwareMemory::IsValid, COMDAT
; _this$ = ecx

; 101  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx

; 102  :     return (m_pMemStruct != NULL);

  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	33 c9		 xor	 ecx, ecx
  0000c	83 78 04 00	 cmp	 DWORD PTR [eax+4], 0
  00010	0f 95 c1	 setne	 cl
  00013	8b c1		 mov	 eax, ecx

; 103  : }

  00015	8b e5		 mov	 esp, ebp
  00017	5d		 pop	 ebp
  00018	c3		 ret	 0
?IsValid@CHardwareMemory@@QAEHXZ ENDP			; CHardwareMemory::IsValid
_TEXT	ENDS
PUBLIC	?TranslateToPhysical@CHardwareMemory@@QAEKPAXKPAK@Z ; CHardwareMemory::TranslateToPhysical
; Function compile flags: /Odtp
;	COMDAT ?TranslateToPhysical@CHardwareMemory@@QAEKPAXKPAK@Z
_TEXT	SEGMENT
_this$ = -24						; size = 4
_sum$140957 = -20					; size = 4
_pRetVal$140958 = -16					; size = 4
_i$140956 = -12						; size = 4
_pPages$140953 = -8					; size = 4
_Offset$140955 = -4					; size = 4
_pUser$ = 8						; size = 4
_dwSizeWanted$ = 12					; size = 4
_pdwSizeAvailable$ = 16					; size = 4
?TranslateToPhysical@CHardwareMemory@@QAEKPAXKPAK@Z PROC ; CHardwareMemory::TranslateToPhysical, COMDAT
; _this$ = ecx

; 53   : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	83 ec 18	 sub	 esp, 24			; 00000018H
  00006	89 4d e8	 mov	 DWORD PTR _this$[ebp], ecx

; 54   :     if(m_pMemStruct != NULL)

  00009	8b 45 e8	 mov	 eax, DWORD PTR _this$[ebp]
  0000c	83 78 04 00	 cmp	 DWORD PTR [eax+4], 0
  00010	0f 84 ca 00 00
	00		 je	 $LN9@TranslateT

; 55   :     {
; 56   :         TPageStruct* pPages = (TPageStruct*)(m_pMemStruct + 1);

  00016	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  00019	8b 51 04	 mov	 edx, DWORD PTR [ecx+4]
  0001c	83 c2 14	 add	 edx, 20			; 00000014H
  0001f	89 55 f8	 mov	 DWORD PTR _pPages$140953[ebp], edx

; 57   :         DWORD Offset;
; 58   :         DWORD i;
; 59   :         DWORD sum;
; 60   :         DWORD pRetVal = 0;

  00022	c7 45 f0 00 00
	00 00		 mov	 DWORD PTR _pRetVal$140958[ebp], 0

; 61   : 
; 62   :         Offset = (DWORD)pUser - (DWORD)m_pMemStruct->dwUser;

  00029	8b 45 e8	 mov	 eax, DWORD PTR _this$[ebp]
  0002c	8b 48 04	 mov	 ecx, DWORD PTR [eax+4]
  0002f	8b 55 08	 mov	 edx, DWORD PTR _pUser$[ebp]
  00032	2b 51 10	 sub	 edx, DWORD PTR [ecx+16]
  00035	89 55 fc	 mov	 DWORD PTR _Offset$140955[ebp], edx

; 63   :         sum = 0;

  00038	c7 45 ec 00 00
	00 00		 mov	 DWORD PTR _sum$140957[ebp], 0

; 64   :         i = 0;

  0003f	c7 45 f4 00 00
	00 00		 mov	 DWORD PTR _i$140956[ebp], 0
$LN8@TranslateT:

; 65   :         while (i < m_pMemStruct->dwPages)

  00046	8b 45 e8	 mov	 eax, DWORD PTR _this$[ebp]
  00049	8b 48 04	 mov	 ecx, DWORD PTR [eax+4]
  0004c	8b 55 f4	 mov	 edx, DWORD PTR _i$140956[ebp]
  0004f	3b 51 04	 cmp	 edx, DWORD PTR [ecx+4]
  00052	73 5d		 jae	 SHORT $LN7@TranslateT

; 66   :         {
; 67   :             if (sum + pPages[i].dwSize > (unsigned)Offset)

  00054	8b 45 f4	 mov	 eax, DWORD PTR _i$140956[ebp]
  00057	8b 4d f8	 mov	 ecx, DWORD PTR _pPages$140953[ebp]
  0005a	8b 55 ec	 mov	 edx, DWORD PTR _sum$140957[ebp]
  0005d	03 14 c1	 add	 edx, DWORD PTR [ecx+eax*8]
  00060	3b 55 fc	 cmp	 edx, DWORD PTR _Offset$140955[ebp]
  00063	76 32		 jbe	 SHORT $LN6@TranslateT

; 68   :             {
; 69   :                 Offset -= sum;

  00065	8b 45 fc	 mov	 eax, DWORD PTR _Offset$140955[ebp]
  00068	2b 45 ec	 sub	 eax, DWORD PTR _sum$140957[ebp]
  0006b	89 45 fc	 mov	 DWORD PTR _Offset$140955[ebp], eax

; 70   :                 pRetVal = pPages[i].dwPhysical + Offset;

  0006e	8b 4d f4	 mov	 ecx, DWORD PTR _i$140956[ebp]
  00071	8b 55 f8	 mov	 edx, DWORD PTR _pPages$140953[ebp]
  00074	8b 44 ca 04	 mov	 eax, DWORD PTR [edx+ecx*8+4]
  00078	03 45 fc	 add	 eax, DWORD PTR _Offset$140955[ebp]
  0007b	89 45 f0	 mov	 DWORD PTR _pRetVal$140958[ebp], eax

; 71   :                 if ( pdwSizeAvailable != NULL )

  0007e	83 7d 10 00	 cmp	 DWORD PTR _pdwSizeAvailable$[ebp], 0
  00082	74 11		 je	 SHORT $LN5@TranslateT

; 72   :                 {
; 73   :                     *pdwSizeAvailable = pPages[i].dwSize - Offset;

  00084	8b 4d f4	 mov	 ecx, DWORD PTR _i$140956[ebp]
  00087	8b 55 f8	 mov	 edx, DWORD PTR _pPages$140953[ebp]
  0008a	8b 04 ca	 mov	 eax, DWORD PTR [edx+ecx*8]
  0008d	2b 45 fc	 sub	 eax, DWORD PTR _Offset$140955[ebp]
  00090	8b 4d 10	 mov	 ecx, DWORD PTR _pdwSizeAvailable$[ebp]
  00093	89 01		 mov	 DWORD PTR [ecx], eax
$LN5@TranslateT:

; 74   :                 }
; 75   :                 break;

  00095	eb 1a		 jmp	 SHORT $LN7@TranslateT
$LN6@TranslateT:

; 76   :             }
; 77   :             sum += pPages[i].dwSize;

  00097	8b 55 f4	 mov	 edx, DWORD PTR _i$140956[ebp]
  0009a	8b 45 f8	 mov	 eax, DWORD PTR _pPages$140953[ebp]
  0009d	8b 4d ec	 mov	 ecx, DWORD PTR _sum$140957[ebp]
  000a0	03 0c d0	 add	 ecx, DWORD PTR [eax+edx*8]
  000a3	89 4d ec	 mov	 DWORD PTR _sum$140957[ebp], ecx

; 78   :             i++;

  000a6	8b 55 f4	 mov	 edx, DWORD PTR _i$140956[ebp]
  000a9	83 c2 01	 add	 edx, 1
  000ac	89 55 f4	 mov	 DWORD PTR _i$140956[ebp], edx

; 79   :         }

  000af	eb 95		 jmp	 SHORT $LN8@TranslateT
$LN7@TranslateT:

; 80   :         if(pRetVal == 0)

  000b1	83 7d f0 00	 cmp	 DWORD PTR _pRetVal$140958[ebp], 0
  000b5	75 09		 jne	 SHORT $LN4@TranslateT

; 81   :         {
; 82   :             sum++;

  000b7	8b 45 ec	 mov	 eax, DWORD PTR _sum$140957[ebp]
  000ba	83 c0 01	 add	 eax, 1
  000bd	89 45 ec	 mov	 DWORD PTR _sum$140957[ebp], eax
$LN4@TranslateT:

; 83   :         }
; 84   :         if ( pdwSizeAvailable != NULL )

  000c0	83 7d 10 00	 cmp	 DWORD PTR _pdwSizeAvailable$[ebp], 0
  000c4	74 13		 je	 SHORT $LN3@TranslateT

; 85   :         {
; 86   :             if (*pdwSizeAvailable < dwSizeWanted)

  000c6	8b 4d 10	 mov	 ecx, DWORD PTR _pdwSizeAvailable$[ebp]
  000c9	8b 11		 mov	 edx, DWORD PTR [ecx]
  000cb	3b 55 0c	 cmp	 edx, DWORD PTR _dwSizeWanted$[ebp]
  000ce	73 09		 jae	 SHORT $LN3@TranslateT

; 87   :             {
; 88   :                 sum++;

  000d0	8b 45 ec	 mov	 eax, DWORD PTR _sum$140957[ebp]
  000d3	83 c0 01	 add	 eax, 1
  000d6	89 45 ec	 mov	 DWORD PTR _sum$140957[ebp], eax
$LN3@TranslateT:

; 89   :             }
; 90   :         }
; 91   : 
; 92   :         return pRetVal;

  000d9	8b 45 f0	 mov	 eax, DWORD PTR _pRetVal$140958[ebp]
  000dc	eb 04		 jmp	 SHORT $LN10@TranslateT

; 93   :     }
; 94   :     else

  000de	eb 02		 jmp	 SHORT $LN10@TranslateT
$LN9@TranslateT:

; 95   :     {
; 96   :         return 0;

  000e0	33 c0		 xor	 eax, eax
$LN10@TranslateT:

; 97   :     }
; 98   : }

  000e2	8b e5		 mov	 esp, ebp
  000e4	5d		 pop	 ebp
  000e5	c2 0c 00	 ret	 12			; 0000000cH
?TranslateToPhysical@CHardwareMemory@@QAEKPAXKPAK@Z ENDP ; CHardwareMemory::TranslateToPhysical
_TEXT	ENDS
PUBLIC	?GetUserPointer@CHardwareMemory@@QAEPAXXZ	; CHardwareMemory::GetUserPointer
; Function compile flags: /Odtp
;	COMDAT ?GetUserPointer@CHardwareMemory@@QAEPAXXZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
?GetUserPointer@CHardwareMemory@@QAEPAXXZ PROC		; CHardwareMemory::GetUserPointer, COMDAT
; _this$ = ecx

; 41   : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx

; 42   :     if(m_pMemStruct != NULL)

  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	83 78 04 00	 cmp	 DWORD PTR [eax+4], 0
  0000e	74 0d		 je	 SHORT $LN2@GetUserPoi

; 43   :     {
; 44   :         return m_pMemStruct->dwUser;

  00010	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  00013	8b 51 04	 mov	 edx, DWORD PTR [ecx+4]
  00016	8b 42 10	 mov	 eax, DWORD PTR [edx+16]
  00019	eb 04		 jmp	 SHORT $LN3@GetUserPoi

; 45   :     }
; 46   :     else

  0001b	eb 02		 jmp	 SHORT $LN3@GetUserPoi
$LN2@GetUserPoi:

; 47   :     {
; 48   :         return NULL;

  0001d	33 c0		 xor	 eax, eax
$LN3@GetUserPoi:

; 49   :     }
; 50   : }

  0001f	8b e5		 mov	 esp, ebp
  00021	5d		 pop	 ebp
  00022	c3		 ret	 0
?GetUserPointer@CHardwareMemory@@QAEPAXXZ ENDP		; CHardwareMemory::GetUserPointer
_TEXT	ENDS
PUBLIC	??1CHardwareMemory@@MAE@XZ			; CHardwareMemory::~CHardwareMemory
; Function compile flags: /Odtp
;	COMDAT ??1CHardwareMemory@@MAE@XZ
_TEXT	SEGMENT
_this$ = -4						; size = 4
??1CHardwareMemory@@MAE@XZ PROC				; CHardwareMemory::~CHardwareMemory, COMDAT
; _this$ = ecx

; 36   : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx
  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7CHardwareMemory@@6B@

; 37   : 
; 38   : }

  00010	8b e5		 mov	 esp, ebp
  00012	5d		 pop	 ebp
  00013	c3		 ret	 0
??1CHardwareMemory@@MAE@XZ ENDP				; CHardwareMemory::~CHardwareMemory
; Function compile flags: /Odtp
_TEXT	ENDS
;	COMDAT ??_GCHardwareMemory@@MAEPAXI@Z
_TEXT	SEGMENT
_this$ = -4						; size = 4
___flags$ = 8						; size = 4
??_GCHardwareMemory@@MAEPAXI@Z PROC			; CHardwareMemory::`scalar deleting destructor', COMDAT
; _this$ = ecx
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx
  00007	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  0000a	e8 00 00 00 00	 call	 ??1CHardwareMemory@@MAE@XZ ; CHardwareMemory::~CHardwareMemory
  0000f	8b 45 08	 mov	 eax, DWORD PTR ___flags$[ebp]
  00012	83 e0 01	 and	 eax, 1
  00015	74 0c		 je	 SHORT $LN1@scalar@4
  00017	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  0001a	51		 push	 ecx
  0001b	e8 00 00 00 00	 call	 ??3@YAXPAX@Z		; operator delete
  00020	83 c4 04	 add	 esp, 4
$LN1@scalar@4:
  00023	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  00026	8b e5		 mov	 esp, ebp
  00028	5d		 pop	 ebp
  00029	c2 04 00	 ret	 4
??_GCHardwareMemory@@MAEPAXI@Z ENDP			; CHardwareMemory::`scalar deleting destructor'
_TEXT	ENDS
PUBLIC	??0CHardwareMemory@@IAE@PAVCHardwareDriver@@@Z	; CHardwareMemory::CHardwareMemory
; Function compile flags: /Odtp
;	COMDAT ??0CHardwareMemory@@IAE@PAVCHardwareDriver@@@Z
_TEXT	SEGMENT
_this$ = -4						; size = 4
_pDriver$ = 8						; size = 4
??0CHardwareMemory@@IAE@PAVCHardwareDriver@@@Z PROC	; CHardwareMemory::CHardwareMemory, COMDAT
; _this$ = ecx

; 32   : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx
  00007	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  0000a	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7CHardwareMemory@@6B@
  00010	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  00013	c7 41 04 00 00
	00 00		 mov	 DWORD PTR [ecx+4], 0
  0001a	8b 55 fc	 mov	 edx, DWORD PTR _this$[ebp]
  0001d	8b 45 08	 mov	 eax, DWORD PTR _pDriver$[ebp]
  00020	89 42 08	 mov	 DWORD PTR [edx+8], eax

; 33   : }

  00023	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  00026	8b e5		 mov	 esp, ebp
  00028	5d		 pop	 ebp
  00029	c2 04 00	 ret	 4
??0CHardwareMemory@@IAE@PAVCHardwareDriver@@@Z ENDP	; CHardwareMemory::CHardwareMemory
PUBLIC	??1CContigMemory@@UAE@XZ			; CContigMemory::~CContigMemory
;	COMDAT xdata$x
xdata$x	SEGMENT
__unwindtable$??1CContigMemory@@UAE@XZ DD 0ffffffffH
	DD	FLAT:__unwindfunclet$??1CContigMemory@@UAE@XZ$0
__ehfuncinfo$??1CContigMemory@@UAE@XZ DD 019930522H
	DD	01H
	DD	FLAT:__unwindtable$??1CContigMemory@@UAE@XZ
	DD	2 DUP(00H)
	DD	2 DUP(00H)
	DD	00H
	DD	00H
; Function compile flags: /Odtp
xdata$x	ENDS
;	COMDAT ??1CContigMemory@@UAE@XZ
_TEXT	SEGMENT
_this$ = -24						; size = 4
_dwInParamLength$141051 = -20				; size = 4
_Status$ = -16						; size = 4
__$EHRec$ = -12						; size = 12
??1CContigMemory@@UAE@XZ PROC				; CContigMemory::~CContigMemory, COMDAT
; _this$ = ecx

; 214  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	6a ff		 push	 -1
  00005	68 00 00 00 00	 push	 __ehhandler$??1CContigMemory@@UAE@XZ
  0000a	64 a1 00 00 00
	00		 mov	 eax, DWORD PTR fs:0
  00010	50		 push	 eax
  00011	83 ec 0c	 sub	 esp, 12			; 0000000cH
  00014	a1 00 00 00 00	 mov	 eax, DWORD PTR ___security_cookie
  00019	33 c5		 xor	 eax, ebp
  0001b	50		 push	 eax
  0001c	8d 45 f4	 lea	 eax, DWORD PTR __$EHRec$[ebp]
  0001f	64 a3 00 00 00
	00		 mov	 DWORD PTR fs:0, eax
  00025	89 4d e8	 mov	 DWORD PTR _this$[ebp], ecx
  00028	8b 45 e8	 mov	 eax, DWORD PTR _this$[ebp]
  0002b	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7CContigMemory@@6B@
  00031	c7 45 fc 00 00
	00 00		 mov	 DWORD PTR __$EHRec$[ebp+8], 0

; 215  :     DWORD Status = ERROR_SUCCESS;

  00038	c7 45 f0 00 00
	00 00		 mov	 DWORD PTR _Status$[ebp], 0

; 216  :     if(m_pMemStruct != NULL)

  0003f	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  00042	83 79 04 00	 cmp	 DWORD PTR [ecx+4], 0
  00046	74 34		 je	 SHORT $LN2@CContigMem

; 217  :     {
; 218  :         DWORD dwInParamLength = sizeof(TMemStruct) + sizeof(TPageStruct);

  00048	c7 45 ec 1c 00
	00 00		 mov	 DWORD PTR _dwInParamLength$141051[ebp], 28 ; 0000001cH

; 219  :         Status = m_pDriver->SendCommand(
; 220  :                                           IOCTL_DSDRV_FREEMEMORY,
; 221  :                                           m_pMemStruct,
; 222  :                                           dwInParamLength
; 223  :                                        );

  0004f	8b 55 ec	 mov	 edx, DWORD PTR _dwInParamLength$141051[ebp]
  00052	52		 push	 edx
  00053	8b 45 e8	 mov	 eax, DWORD PTR _this$[ebp]
  00056	8b 48 04	 mov	 ecx, DWORD PTR [eax+4]
  00059	51		 push	 ecx
  0005a	68 21 28 00 8d	 push	 -1929369567		; 8d002821H
  0005f	8b 55 e8	 mov	 edx, DWORD PTR _this$[ebp]
  00062	8b 4a 08	 mov	 ecx, DWORD PTR [edx+8]
  00065	e8 00 00 00 00	 call	 ?SendCommand@CHardwareDriver@@QAEKKPAXK@Z ; CHardwareDriver::SendCommand
  0006a	89 45 f0	 mov	 DWORD PTR _Status$[ebp], eax

; 224  :         free(m_pMemStruct);

  0006d	8b 45 e8	 mov	 eax, DWORD PTR _this$[ebp]
  00070	8b 48 04	 mov	 ecx, DWORD PTR [eax+4]
  00073	51		 push	 ecx
  00074	e8 00 00 00 00	 call	 _free
  00079	83 c4 04	 add	 esp, 4
$LN2@CContigMem:

; 225  :     }
; 226  : }

  0007c	c7 45 fc ff ff
	ff ff		 mov	 DWORD PTR __$EHRec$[ebp+8], -1
  00083	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  00086	e8 00 00 00 00	 call	 ??1CHardwareMemory@@MAE@XZ ; CHardwareMemory::~CHardwareMemory
  0008b	8b 4d f4	 mov	 ecx, DWORD PTR __$EHRec$[ebp]
  0008e	64 89 0d 00 00
	00 00		 mov	 DWORD PTR fs:0, ecx
  00095	59		 pop	 ecx
  00096	8b e5		 mov	 esp, ebp
  00098	5d		 pop	 ebp
  00099	c3		 ret	 0
_TEXT	ENDS
;	COMDAT text$x
text$x	SEGMENT
__unwindfunclet$??1CContigMemory@@UAE@XZ$0:
  00000	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  00003	e9 00 00 00 00	 jmp	 ??1CHardwareMemory@@MAE@XZ ; CHardwareMemory::~CHardwareMemory
__ehhandler$??1CContigMemory@@UAE@XZ:
  00008	8b 54 24 08	 mov	 edx, DWORD PTR [esp+8]
  0000c	8d 42 0c	 lea	 eax, DWORD PTR [edx+12]
  0000f	8b 4a f0	 mov	 ecx, DWORD PTR [edx-16]
  00012	33 c8		 xor	 ecx, eax
  00014	e8 00 00 00 00	 call	 @__security_check_cookie@4
  00019	b8 00 00 00 00	 mov	 eax, OFFSET __ehfuncinfo$??1CContigMemory@@UAE@XZ
  0001e	e9 00 00 00 00	 jmp	 ___CxxFrameHandler3
text$x	ENDS
??1CContigMemory@@UAE@XZ ENDP				; CContigMemory::~CContigMemory
; Function compile flags: /Odtp
;	COMDAT ??_GCContigMemory@@UAEPAXI@Z
_TEXT	SEGMENT
_this$ = -4						; size = 4
___flags$ = 8						; size = 4
??_GCContigMemory@@UAEPAXI@Z PROC			; CContigMemory::`scalar deleting destructor', COMDAT
; _this$ = ecx
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx
  00007	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  0000a	e8 00 00 00 00	 call	 ??1CContigMemory@@UAE@XZ ; CContigMemory::~CContigMemory
  0000f	8b 45 08	 mov	 eax, DWORD PTR ___flags$[ebp]
  00012	83 e0 01	 and	 eax, 1
  00015	74 0c		 je	 SHORT $LN1@scalar@434
  00017	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  0001a	51		 push	 ecx
  0001b	e8 00 00 00 00	 call	 ??3@YAXPAX@Z		; operator delete
  00020	83 c4 04	 add	 esp, 4
$LN1@scalar@434:
  00023	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  00026	8b e5		 mov	 esp, ebp
  00028	5d		 pop	 ebp
  00029	c2 04 00	 ret	 4
??_GCContigMemory@@UAEPAXI@Z ENDP			; CContigMemory::`scalar deleting destructor'
_TEXT	ENDS
PUBLIC	??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z	; CContigMemory::CContigMemory
;	COMDAT xdata$x
xdata$x	SEGMENT
__unwindtable$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z DD 0ffffffffH
	DD	FLAT:__unwindfunclet$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z$0
	DD	00H
	DD	FLAT:__unwindfunclet$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z$1
	DD	00H
	DD	FLAT:__unwindfunclet$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z$2
__ehfuncinfo$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z DD 019930522H
	DD	03H
	DD	FLAT:__unwindtable$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z
	DD	2 DUP(00H)
	DD	2 DUP(00H)
	DD	00H
	DD	00H
; Function compile flags: /Odtp
xdata$x	ENDS
;	COMDAT ??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z
_TEXT	SEGMENT
_this$ = -176						; size = 4
$T348014 = -172						; size = 28
$T348013 = -144						; size = 40
$T348012 = -104						; size = 28
$T348011 = -76						; size = 40
_dwReturnedLength$ = -36				; size = 4
_status$ = -32						; size = 4
_dwOutParamLength$ = -28				; size = 4
_paramIn$ = -24						; size = 12
__$EHRec$ = -12						; size = 12
_pDriver$ = 8						; size = 4
_Bytes$ = 12						; size = 4
??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z PROC	; CContigMemory::CContigMemory, COMDAT
; _this$ = ecx

; 184  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	6a ff		 push	 -1
  00005	68 00 00 00 00	 push	 __ehhandler$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z
  0000a	64 a1 00 00 00
	00		 mov	 eax, DWORD PTR fs:0
  00010	50		 push	 eax
  00011	81 ec a4 00 00
	00		 sub	 esp, 164		; 000000a4H
  00017	a1 00 00 00 00	 mov	 eax, DWORD PTR ___security_cookie
  0001c	33 c5		 xor	 eax, ebp
  0001e	50		 push	 eax
  0001f	8d 45 f4	 lea	 eax, DWORD PTR __$EHRec$[ebp]
  00022	64 a3 00 00 00
	00		 mov	 DWORD PTR fs:0, eax
  00028	89 8d 50 ff ff
	ff		 mov	 DWORD PTR _this$[ebp], ecx
  0002e	8b 45 08	 mov	 eax, DWORD PTR _pDriver$[ebp]
  00031	50		 push	 eax
  00032	8b 8d 50 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  00038	e8 00 00 00 00	 call	 ??0CHardwareMemory@@IAE@PAVCHardwareDriver@@@Z ; CHardwareMemory::CHardwareMemory
  0003d	c7 45 fc 00 00
	00 00		 mov	 DWORD PTR __$EHRec$[ebp+8], 0
  00044	8b 8d 50 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  0004a	c7 01 00 00 00
	00		 mov	 DWORD PTR [ecx], OFFSET ??_7CContigMemory@@6B@

; 185  :     TDSDrvParam paramIn;
; 186  :     DWORD dwReturnedLength;
; 187  :     DWORD status;
; 188  : 
; 189  :     DWORD dwOutParamLength = sizeof(TMemStruct) + sizeof(TPageStruct);

  00050	c7 45 e4 1c 00
	00 00		 mov	 DWORD PTR _dwOutParamLength$[ebp], 28 ; 0000001cH

; 190  :     m_pMemStruct = (TMemStruct*) malloc(dwOutParamLength);

  00057	8b 55 e4	 mov	 edx, DWORD PTR _dwOutParamLength$[ebp]
  0005a	52		 push	 edx
  0005b	e8 00 00 00 00	 call	 _malloc
  00060	83 c4 04	 add	 esp, 4
  00063	8b 8d 50 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  00069	89 41 04	 mov	 DWORD PTR [ecx+4], eax

; 191  :     if(m_pMemStruct == NULL)

  0006c	8b 95 50 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  00072	83 7a 04 00	 cmp	 DWORD PTR [edx+4], 0
  00076	75 37		 jne	 SHORT $LN3@CContigMem@2

; 192  :     {
; 193  :         throw std::runtime_error("Out of memory");

  00078	68 00 00 00 00	 push	 OFFSET ??_C@_0O@NALGGDJF@Out?5of?5memory?$AA@
  0007d	8d 4d 98	 lea	 ecx, DWORD PTR $T348012[ebp]
  00080	e8 00 00 00 00	 call	 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >
  00085	c6 45 fc 01	 mov	 BYTE PTR __$EHRec$[ebp+8], 1
  00089	8d 45 98	 lea	 eax, DWORD PTR $T348012[ebp]
  0008c	50		 push	 eax
  0008d	8d 4d b4	 lea	 ecx, DWORD PTR $T348011[ebp]
  00090	e8 00 00 00 00	 call	 ??0runtime_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z ; std::runtime_error::runtime_error
  00095	68 00 00 00 00	 push	 OFFSET __TI2?AVruntime_error@std@@
  0009a	8d 4d b4	 lea	 ecx, DWORD PTR $T348011[ebp]
  0009d	51		 push	 ecx
  0009e	e8 00 00 00 00	 call	 __CxxThrowException@8
  000a3	c6 45 fc 00	 mov	 BYTE PTR __$EHRec$[ebp+8], 0
  000a7	8d 4d 98	 lea	 ecx, DWORD PTR $T348012[ebp]
  000aa	e8 00 00 00 00	 call	 ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >
$LN3@CContigMem@2:

; 194  :     }
; 195  : 
; 196  :     paramIn.dwValue = Bytes;

  000af	8b 55 0c	 mov	 edx, DWORD PTR _Bytes$[ebp]
  000b2	89 55 ec	 mov	 DWORD PTR _paramIn$[ebp+4], edx

; 197  :     paramIn.dwFlags = ALLOC_MEMORY_CONTIG;

  000b5	c7 45 f0 01 00
	00 00		 mov	 DWORD PTR _paramIn$[ebp+8], 1

; 198  :     paramIn.dwAddress = 0;

  000bc	c7 45 e8 00 00
	00 00		 mov	 DWORD PTR _paramIn$[ebp], 0

; 199  :     status = m_pDriver->SendCommand(IOCTL_DSDRV_ALLOCMEMORY,
; 200  :                             &paramIn,
; 201  :                             sizeof(paramIn),
; 202  :                             m_pMemStruct,
; 203  :                             dwOutParamLength,
; 204  :                             &dwReturnedLength);

  000c3	8d 45 dc	 lea	 eax, DWORD PTR _dwReturnedLength$[ebp]
  000c6	50		 push	 eax
  000c7	8b 4d e4	 mov	 ecx, DWORD PTR _dwOutParamLength$[ebp]
  000ca	51		 push	 ecx
  000cb	8b 95 50 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  000d1	8b 42 04	 mov	 eax, DWORD PTR [edx+4]
  000d4	50		 push	 eax
  000d5	6a 0c		 push	 12			; 0000000cH
  000d7	8d 4d e8	 lea	 ecx, DWORD PTR _paramIn$[ebp]
  000da	51		 push	 ecx
  000db	68 1c 28 00 8d	 push	 -1929369572		; 8d00281cH
  000e0	8b 95 50 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  000e6	8b 4a 08	 mov	 ecx, DWORD PTR [edx+8]
  000e9	e8 00 00 00 00	 call	 ?SendCommand@CHardwareDriver@@QAEKKPAXK0KPAK@Z ; CHardwareDriver::SendCommand
  000ee	89 45 e0	 mov	 DWORD PTR _status$[ebp], eax

; 205  : 
; 206  :     if(status != ERROR_SUCCESS || m_pMemStruct->dwUser == 0)

  000f1	83 7d e0 00	 cmp	 DWORD PTR _status$[ebp], 0
  000f5	75 0f		 jne	 SHORT $LN1@CContigMem@2
  000f7	8b 85 50 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
  000fd	8b 48 04	 mov	 ecx, DWORD PTR [eax+4]
  00100	83 79 10 00	 cmp	 DWORD PTR [ecx+16], 0
  00104	75 58		 jne	 SHORT $LN4@CContigMem@2
$LN1@CContigMem@2:

; 207  :     {
; 208  :         free(m_pMemStruct);

  00106	8b 95 50 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  0010c	8b 42 04	 mov	 eax, DWORD PTR [edx+4]
  0010f	50		 push	 eax
  00110	e8 00 00 00 00	 call	 _free
  00115	83 c4 04	 add	 esp, 4

; 209  :         throw std::runtime_error("Memory mapping failed");

  00118	68 00 00 00 00	 push	 OFFSET ??_C@_0BG@HLJBIOAE@Memory?5mapping?5failed?$AA@
  0011d	8d 8d 54 ff ff
	ff		 lea	 ecx, DWORD PTR $T348014[ebp]
  00123	e8 00 00 00 00	 call	 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >
  00128	c6 45 fc 02	 mov	 BYTE PTR __$EHRec$[ebp+8], 2
  0012c	8d 8d 54 ff ff
	ff		 lea	 ecx, DWORD PTR $T348014[ebp]
  00132	51		 push	 ecx
  00133	8d 8d 70 ff ff
	ff		 lea	 ecx, DWORD PTR $T348013[ebp]
  00139	e8 00 00 00 00	 call	 ??0runtime_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z ; std::runtime_error::runtime_error
  0013e	68 00 00 00 00	 push	 OFFSET __TI2?AVruntime_error@std@@
  00143	8d 95 70 ff ff
	ff		 lea	 edx, DWORD PTR $T348013[ebp]
  00149	52		 push	 edx
  0014a	e8 00 00 00 00	 call	 __CxxThrowException@8
  0014f	c6 45 fc 00	 mov	 BYTE PTR __$EHRec$[ebp+8], 0
  00153	8d 8d 54 ff ff
	ff		 lea	 ecx, DWORD PTR $T348014[ebp]
  00159	e8 00 00 00 00	 call	 ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >
$LN4@CContigMem@2:

; 210  :     }
; 211  : }

  0015e	c7 45 fc ff ff
	ff ff		 mov	 DWORD PTR __$EHRec$[ebp+8], -1
  00165	8b 85 50 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
$LN5@CContigMem@2:
  0016b	8b 4d f4	 mov	 ecx, DWORD PTR __$EHRec$[ebp]
  0016e	64 89 0d 00 00
	00 00		 mov	 DWORD PTR fs:0, ecx
  00175	59		 pop	 ecx
  00176	8b e5		 mov	 esp, ebp
  00178	5d		 pop	 ebp
  00179	c2 08 00	 ret	 8
_TEXT	ENDS
;	COMDAT text$x
text$x	SEGMENT
__unwindfunclet$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z$0:
  00000	8b 8d 50 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  00006	e9 00 00 00 00	 jmp	 ??1CHardwareMemory@@MAE@XZ ; CHardwareMemory::~CHardwareMemory
__unwindfunclet$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z$1:
  0000b	8d 4d 98	 lea	 ecx, DWORD PTR $T348012[ebp]
  0000e	e9 00 00 00 00	 jmp	 ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >
__unwindfunclet$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z$2:
  00013	8d 8d 54 ff ff
	ff		 lea	 ecx, DWORD PTR $T348014[ebp]
  00019	e9 00 00 00 00	 jmp	 ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >
__ehhandler$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z:
  0001e	8b 54 24 08	 mov	 edx, DWORD PTR [esp+8]
  00022	8d 42 0c	 lea	 eax, DWORD PTR [edx+12]
  00025	8b 8a 58 ff ff
	ff		 mov	 ecx, DWORD PTR [edx-168]
  0002b	33 c8		 xor	 ecx, eax
  0002d	e8 00 00 00 00	 call	 @__security_check_cookie@4
  00032	b8 00 00 00 00	 mov	 eax, OFFSET __ehfuncinfo$??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z
  00037	e9 00 00 00 00	 jmp	 ___CxxFrameHandler3
text$x	ENDS
??0CContigMemory@@QAE@PAVCHardwareDriver@@I@Z ENDP	; CContigMemory::CContigMemory
PUBLIC	??1CUserMemory@@UAE@XZ				; CUserMemory::~CUserMemory
;	COMDAT xdata$x
xdata$x	SEGMENT
__unwindtable$??1CUserMemory@@UAE@XZ DD 0ffffffffH
	DD	FLAT:__unwindfunclet$??1CUserMemory@@UAE@XZ$0
__ehfuncinfo$??1CUserMemory@@UAE@XZ DD 019930522H
	DD	01H
	DD	FLAT:__unwindtable$??1CUserMemory@@UAE@XZ
	DD	2 DUP(00H)
	DD	2 DUP(00H)
	DD	00H
	DD	00H
; Function compile flags: /Odtp
xdata$x	ENDS
;	COMDAT ??1CUserMemory@@UAE@XZ
_TEXT	SEGMENT
_this$ = -24						; size = 4
_dwInParamLength$141016 = -20				; size = 4
_status$ = -16						; size = 4
__$EHRec$ = -12						; size = 12
??1CUserMemory@@UAE@XZ PROC				; CUserMemory::~CUserMemory, COMDAT
; _this$ = ecx

; 168  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	6a ff		 push	 -1
  00005	68 00 00 00 00	 push	 __ehhandler$??1CUserMemory@@UAE@XZ
  0000a	64 a1 00 00 00
	00		 mov	 eax, DWORD PTR fs:0
  00010	50		 push	 eax
  00011	83 ec 0c	 sub	 esp, 12			; 0000000cH
  00014	a1 00 00 00 00	 mov	 eax, DWORD PTR ___security_cookie
  00019	33 c5		 xor	 eax, ebp
  0001b	50		 push	 eax
  0001c	8d 45 f4	 lea	 eax, DWORD PTR __$EHRec$[ebp]
  0001f	64 a3 00 00 00
	00		 mov	 DWORD PTR fs:0, eax
  00025	89 4d e8	 mov	 DWORD PTR _this$[ebp], ecx
  00028	8b 45 e8	 mov	 eax, DWORD PTR _this$[ebp]
  0002b	c7 00 00 00 00
	00		 mov	 DWORD PTR [eax], OFFSET ??_7CUserMemory@@6B@
  00031	c7 45 fc 00 00
	00 00		 mov	 DWORD PTR __$EHRec$[ebp+8], 0

; 169  :     DWORD status = ERROR_SUCCESS;

  00038	c7 45 f0 00 00
	00 00		 mov	 DWORD PTR _status$[ebp], 0

; 170  :     if(m_pMemStruct != NULL)

  0003f	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  00042	83 79 04 00	 cmp	 DWORD PTR [ecx+4], 0
  00046	74 40		 je	 SHORT $LN2@CUserMemor

; 171  :     {
; 172  :         DWORD dwInParamLength = sizeof(TMemStruct) + m_pMemStruct->dwPages * sizeof(TPageStruct);

  00048	8b 55 e8	 mov	 edx, DWORD PTR _this$[ebp]
  0004b	8b 42 04	 mov	 eax, DWORD PTR [edx+4]
  0004e	8b 48 04	 mov	 ecx, DWORD PTR [eax+4]
  00051	8d 14 cd 14 00
	00 00		 lea	 edx, DWORD PTR [ecx*8+20]
  00058	89 55 ec	 mov	 DWORD PTR _dwInParamLength$141016[ebp], edx

; 173  :         status = m_pDriver->SendCommand(IOCTL_DSDRV_FREEMEMORY, m_pMemStruct, dwInParamLength);

  0005b	8b 45 ec	 mov	 eax, DWORD PTR _dwInParamLength$141016[ebp]
  0005e	50		 push	 eax
  0005f	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  00062	8b 51 04	 mov	 edx, DWORD PTR [ecx+4]
  00065	52		 push	 edx
  00066	68 21 28 00 8d	 push	 -1929369567		; 8d002821H
  0006b	8b 45 e8	 mov	 eax, DWORD PTR _this$[ebp]
  0006e	8b 48 08	 mov	 ecx, DWORD PTR [eax+8]
  00071	e8 00 00 00 00	 call	 ?SendCommand@CHardwareDriver@@QAEKKPAXK@Z ; CHardwareDriver::SendCommand
  00076	89 45 f0	 mov	 DWORD PTR _status$[ebp], eax

; 174  :         free(m_pMemStruct);

  00079	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  0007c	8b 51 04	 mov	 edx, DWORD PTR [ecx+4]
  0007f	52		 push	 edx
  00080	e8 00 00 00 00	 call	 _free
  00085	83 c4 04	 add	 esp, 4
$LN2@CUserMemor:

; 175  :     }
; 176  :     if(m_AllocatedBlock != NULL)

  00088	8b 45 e8	 mov	 eax, DWORD PTR _this$[ebp]
  0008b	83 78 0c 00	 cmp	 DWORD PTR [eax+12], 0
  0008f	74 0f		 je	 SHORT $LN3@CUserMemor

; 177  :     {
; 178  :         free((void*)m_AllocatedBlock);

  00091	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  00094	8b 51 0c	 mov	 edx, DWORD PTR [ecx+12]
  00097	52		 push	 edx
  00098	e8 00 00 00 00	 call	 _free
  0009d	83 c4 04	 add	 esp, 4
$LN3@CUserMemor:

; 179  :     }
; 180  : }

  000a0	c7 45 fc ff ff
	ff ff		 mov	 DWORD PTR __$EHRec$[ebp+8], -1
  000a7	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  000aa	e8 00 00 00 00	 call	 ??1CHardwareMemory@@MAE@XZ ; CHardwareMemory::~CHardwareMemory
  000af	8b 4d f4	 mov	 ecx, DWORD PTR __$EHRec$[ebp]
  000b2	64 89 0d 00 00
	00 00		 mov	 DWORD PTR fs:0, ecx
  000b9	59		 pop	 ecx
  000ba	8b e5		 mov	 esp, ebp
  000bc	5d		 pop	 ebp
  000bd	c3		 ret	 0
_TEXT	ENDS
;	COMDAT text$x
text$x	SEGMENT
__unwindfunclet$??1CUserMemory@@UAE@XZ$0:
  00000	8b 4d e8	 mov	 ecx, DWORD PTR _this$[ebp]
  00003	e9 00 00 00 00	 jmp	 ??1CHardwareMemory@@MAE@XZ ; CHardwareMemory::~CHardwareMemory
__ehhandler$??1CUserMemory@@UAE@XZ:
  00008	8b 54 24 08	 mov	 edx, DWORD PTR [esp+8]
  0000c	8d 42 0c	 lea	 eax, DWORD PTR [edx+12]
  0000f	8b 4a f0	 mov	 ecx, DWORD PTR [edx-16]
  00012	33 c8		 xor	 ecx, eax
  00014	e8 00 00 00 00	 call	 @__security_check_cookie@4
  00019	b8 00 00 00 00	 mov	 eax, OFFSET __ehfuncinfo$??1CUserMemory@@UAE@XZ
  0001e	e9 00 00 00 00	 jmp	 ___CxxFrameHandler3
text$x	ENDS
??1CUserMemory@@UAE@XZ ENDP				; CUserMemory::~CUserMemory
; Function compile flags: /Odtp
;	COMDAT ??_GCUserMemory@@UAEPAXI@Z
_TEXT	SEGMENT
_this$ = -4						; size = 4
___flags$ = 8						; size = 4
??_GCUserMemory@@UAEPAXI@Z PROC				; CUserMemory::`scalar deleting destructor', COMDAT
; _this$ = ecx
  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	51		 push	 ecx
  00004	89 4d fc	 mov	 DWORD PTR _this$[ebp], ecx
  00007	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  0000a	e8 00 00 00 00	 call	 ??1CUserMemory@@UAE@XZ	; CUserMemory::~CUserMemory
  0000f	8b 45 08	 mov	 eax, DWORD PTR ___flags$[ebp]
  00012	83 e0 01	 and	 eax, 1
  00015	74 0c		 je	 SHORT $LN1@scalar@435
  00017	8b 4d fc	 mov	 ecx, DWORD PTR _this$[ebp]
  0001a	51		 push	 ecx
  0001b	e8 00 00 00 00	 call	 ??3@YAXPAX@Z		; operator delete
  00020	83 c4 04	 add	 esp, 4
$LN1@scalar@435:
  00023	8b 45 fc	 mov	 eax, DWORD PTR _this$[ebp]
  00026	8b e5		 mov	 esp, ebp
  00028	5d		 pop	 ebp
  00029	c2 04 00	 ret	 4
??_GCUserMemory@@UAEPAXI@Z ENDP				; CUserMemory::`scalar deleting destructor'
_TEXT	ENDS
PUBLIC	??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z	; CUserMemory::CUserMemory
;	COMDAT xdata$x
xdata$x	SEGMENT
__unwindtable$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z DD 0ffffffffH
	DD	FLAT:__unwindfunclet$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z$0
	DD	00H
	DD	FLAT:__unwindfunclet$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z$1
__ehfuncinfo$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z DD 019930522H
	DD	02H
	DD	FLAT:__unwindtable$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z
	DD	2 DUP(00H)
	DD	2 DUP(00H)
	DD	00H
	DD	00H
; Function compile flags: /Odtp
xdata$x	ENDS
;	COMDAT ??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z
_TEXT	SEGMENT
_this$ = -136						; size = 4
$T348040 = -132						; size = 28
$T348039 = -104						; size = 40
$T348038 = -64						; size = 12
$T348037 = -52						; size = 12
_dwReturnedLength$ = -40				; size = 4
_status$ = -36						; size = 4
_dwOutParamLength$ = -32				; size = 4
_paramIn$ = -28						; size = 12
_nPages$ = -16						; size = 4
__$EHRec$ = -12						; size = 12
_pDriver$ = 8						; size = 4
_Bytes$ = 12						; size = 4
??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z PROC	; CUserMemory::CUserMemory, COMDAT
; _this$ = ecx

; 108  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	6a ff		 push	 -1
  00005	68 00 00 00 00	 push	 __ehhandler$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z
  0000a	64 a1 00 00 00
	00		 mov	 eax, DWORD PTR fs:0
  00010	50		 push	 eax
  00011	83 ec 7c	 sub	 esp, 124		; 0000007cH
  00014	a1 00 00 00 00	 mov	 eax, DWORD PTR ___security_cookie
  00019	33 c5		 xor	 eax, ebp
  0001b	50		 push	 eax
  0001c	8d 45 f4	 lea	 eax, DWORD PTR __$EHRec$[ebp]
  0001f	64 a3 00 00 00
	00		 mov	 DWORD PTR fs:0, eax
  00025	89 8d 78 ff ff
	ff		 mov	 DWORD PTR _this$[ebp], ecx
  0002b	8b 45 08	 mov	 eax, DWORD PTR _pDriver$[ebp]
  0002e	50		 push	 eax
  0002f	8b 8d 78 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  00035	e8 00 00 00 00	 call	 ??0CHardwareMemory@@IAE@PAVCHardwareDriver@@@Z ; CHardwareMemory::CHardwareMemory
  0003a	c7 45 fc 00 00
	00 00		 mov	 DWORD PTR __$EHRec$[ebp+8], 0
  00041	8b 8d 78 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  00047	c7 01 00 00 00
	00		 mov	 DWORD PTR [ecx], OFFSET ??_7CUserMemory@@6B@
  0004d	8b 95 78 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  00053	c7 42 0c 00 00
	00 00		 mov	 DWORD PTR [edx+12], 0

; 109  :     TDSDrvParam paramIn;
; 110  :     DWORD dwReturnedLength;
; 111  :     DWORD status;
; 112  :     DWORD nPages;
; 113  : 
; 114  :     m_AllocatedBlock = malloc(Bytes + 0xFFF);

  0005a	8b 45 0c	 mov	 eax, DWORD PTR _Bytes$[ebp]
  0005d	05 ff 0f 00 00	 add	 eax, 4095		; 00000fffH
  00062	50		 push	 eax
  00063	e8 00 00 00 00	 call	 _malloc
  00068	83 c4 04	 add	 esp, 4
  0006b	8b 8d 78 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  00071	89 41 0c	 mov	 DWORD PTR [ecx+12], eax

; 115  :     if(m_AllocatedBlock == NULL)

  00074	8b 95 78 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  0007a	83 7a 0c 00	 cmp	 DWORD PTR [edx+12], 0
  0007e	75 1b		 jne	 SHORT $LN6@CUserMemor@2

; 116  :     {
; 117  :         throw std::bad_alloc("Out of memory");

  00080	68 00 00 00 00	 push	 OFFSET ??_C@_0O@NALGGDJF@Out?5of?5memory?$AA@
  00085	8d 4d cc	 lea	 ecx, DWORD PTR $T348037[ebp]
  00088	e8 00 00 00 00	 call	 ??0bad_alloc@std@@QAE@PBD@Z ; std::bad_alloc::bad_alloc
  0008d	68 00 00 00 00	 push	 OFFSET __TI2?AVbad_alloc@std@@
  00092	8d 45 cc	 lea	 eax, DWORD PTR $T348037[ebp]
  00095	50		 push	 eax
  00096	e8 00 00 00 00	 call	 __CxxThrowException@8
$LN6@CUserMemor@2:

; 118  :     }
; 119  : 
; 120  :     memset(m_AllocatedBlock, 0, Bytes + 0xFFF);

  0009b	8b 4d 0c	 mov	 ecx, DWORD PTR _Bytes$[ebp]
  0009e	81 c1 ff 0f 00
	00		 add	 ecx, 4095		; 00000fffH
  000a4	51		 push	 ecx
  000a5	6a 00		 push	 0
  000a7	8b 95 78 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  000ad	8b 42 0c	 mov	 eax, DWORD PTR [edx+12]
  000b0	50		 push	 eax
  000b1	e8 00 00 00 00	 call	 _memset
  000b6	83 c4 0c	 add	 esp, 12			; 0000000cH

; 121  : 
; 122  :     nPages = Bytes / 0x1000 + 1;

  000b9	8b 4d 0c	 mov	 ecx, DWORD PTR _Bytes$[ebp]
  000bc	c1 e9 0c	 shr	 ecx, 12			; 0000000cH
  000bf	83 c1 01	 add	 ecx, 1
  000c2	89 4d f0	 mov	 DWORD PTR _nPages$[ebp], ecx

; 123  : 
; 124  :     DWORD dwOutParamLength = sizeof(TMemStruct) + nPages * sizeof(TPageStruct);

  000c5	8b 55 f0	 mov	 edx, DWORD PTR _nPages$[ebp]
  000c8	8d 04 d5 14 00
	00 00		 lea	 eax, DWORD PTR [edx*8+20]
  000cf	89 45 e0	 mov	 DWORD PTR _dwOutParamLength$[ebp], eax

; 125  :     m_pMemStruct = (TMemStruct*) malloc(dwOutParamLength);

  000d2	8b 4d e0	 mov	 ecx, DWORD PTR _dwOutParamLength$[ebp]
  000d5	51		 push	 ecx
  000d6	e8 00 00 00 00	 call	 _malloc
  000db	83 c4 04	 add	 esp, 4
  000de	8b 95 78 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  000e4	89 42 04	 mov	 DWORD PTR [edx+4], eax

; 126  :     if(m_pMemStruct == NULL)

  000e7	8b 85 78 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
  000ed	83 78 04 00	 cmp	 DWORD PTR [eax+4], 0
  000f1	75 3a		 jne	 SHORT $LN5@CUserMemor@2

; 127  :     {
; 128  :         free(m_AllocatedBlock);

  000f3	8b 8d 78 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  000f9	8b 51 0c	 mov	 edx, DWORD PTR [ecx+12]
  000fc	52		 push	 edx
  000fd	e8 00 00 00 00	 call	 _free
  00102	83 c4 04	 add	 esp, 4

; 129  :         m_AllocatedBlock = NULL;

  00105	8b 85 78 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
  0010b	c7 40 0c 00 00
	00 00		 mov	 DWORD PTR [eax+12], 0

; 130  :         throw std::bad_alloc("Out of memory");

  00112	68 00 00 00 00	 push	 OFFSET ??_C@_0O@NALGGDJF@Out?5of?5memory?$AA@
  00117	8d 4d c0	 lea	 ecx, DWORD PTR $T348038[ebp]
  0011a	e8 00 00 00 00	 call	 ??0bad_alloc@std@@QAE@PBD@Z ; std::bad_alloc::bad_alloc
  0011f	68 00 00 00 00	 push	 OFFSET __TI2?AVbad_alloc@std@@
  00124	8d 4d c0	 lea	 ecx, DWORD PTR $T348038[ebp]
  00127	51		 push	 ecx
  00128	e8 00 00 00 00	 call	 __CxxThrowException@8
$LN5@CUserMemor@2:

; 131  :     }
; 132  : 
; 133  :     memset(m_pMemStruct, 0, dwOutParamLength);

  0012d	8b 55 e0	 mov	 edx, DWORD PTR _dwOutParamLength$[ebp]
  00130	52		 push	 edx
  00131	6a 00		 push	 0
  00133	8b 85 78 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
  00139	8b 48 04	 mov	 ecx, DWORD PTR [eax+4]
  0013c	51		 push	 ecx
  0013d	e8 00 00 00 00	 call	 _memset
  00142	83 c4 0c	 add	 esp, 12			; 0000000cH

; 134  : 
; 135  :     paramIn.dwValue = Bytes;

  00145	8b 55 0c	 mov	 edx, DWORD PTR _Bytes$[ebp]
  00148	89 55 e8	 mov	 DWORD PTR _paramIn$[ebp+4], edx

; 136  :     paramIn.dwFlags = 0;

  0014b	c7 45 ec 00 00
	00 00		 mov	 DWORD PTR _paramIn$[ebp+8], 0

; 137  : 
; 138  :     // align memory to page boundary
; 139  :     if(((DWORD)m_AllocatedBlock & 0xFFFFF000) < (DWORD)m_AllocatedBlock)

  00152	8b 85 78 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
  00158	8b 48 0c	 mov	 ecx, DWORD PTR [eax+12]
  0015b	81 e1 00 f0 ff
	ff		 and	 ecx, -4096		; fffff000H
  00161	8b 95 78 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  00167	3b 4a 0c	 cmp	 ecx, DWORD PTR [edx+12]
  0016a	73 1a		 jae	 SHORT $LN4@CUserMemor@2

; 140  :     {
; 141  :         paramIn.dwAddress = (((DWORD)m_AllocatedBlock + 0xFFF) & 0xFFFFF000);

  0016c	8b 85 78 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
  00172	8b 48 0c	 mov	 ecx, DWORD PTR [eax+12]
  00175	81 c1 ff 0f 00
	00		 add	 ecx, 4095		; 00000fffH
  0017b	81 e1 00 f0 ff
	ff		 and	 ecx, -4096		; fffff000H
  00181	89 4d e4	 mov	 DWORD PTR _paramIn$[ebp], ecx

; 142  :     }
; 143  :     else

  00184	eb 0c		 jmp	 SHORT $LN3@CUserMemor@2
$LN4@CUserMemor@2:

; 144  :     {
; 145  :         paramIn.dwAddress = (DWORD)m_AllocatedBlock;

  00186	8b 95 78 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  0018c	8b 42 0c	 mov	 eax, DWORD PTR [edx+12]
  0018f	89 45 e4	 mov	 DWORD PTR _paramIn$[ebp], eax
$LN3@CUserMemor@2:

; 146  :     }
; 147  : 
; 148  :     status = m_pDriver->SendCommand(IOCTL_DSDRV_ALLOCMEMORY,
; 149  :                             &paramIn,
; 150  :                             sizeof(paramIn),
; 151  :                             m_pMemStruct,
; 152  :                             dwOutParamLength,
; 153  :                             &dwReturnedLength);

  00192	8d 4d d8	 lea	 ecx, DWORD PTR _dwReturnedLength$[ebp]
  00195	51		 push	 ecx
  00196	8b 55 e0	 mov	 edx, DWORD PTR _dwOutParamLength$[ebp]
  00199	52		 push	 edx
  0019a	8b 85 78 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
  001a0	8b 48 04	 mov	 ecx, DWORD PTR [eax+4]
  001a3	51		 push	 ecx
  001a4	6a 0c		 push	 12			; 0000000cH
  001a6	8d 55 e4	 lea	 edx, DWORD PTR _paramIn$[ebp]
  001a9	52		 push	 edx
  001aa	68 1c 28 00 8d	 push	 -1929369572		; 8d00281cH
  001af	8b 85 78 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
  001b5	8b 48 08	 mov	 ecx, DWORD PTR [eax+8]
  001b8	e8 00 00 00 00	 call	 ?SendCommand@CHardwareDriver@@QAEKKPAXK0KPAK@Z ; CHardwareDriver::SendCommand
  001bd	89 45 dc	 mov	 DWORD PTR _status$[ebp], eax

; 154  : 
; 155  :     if(status != ERROR_SUCCESS || m_pMemStruct->dwUser == 0)

  001c0	83 7d dc 00	 cmp	 DWORD PTR _status$[ebp], 0
  001c4	75 0f		 jne	 SHORT $LN1@CUserMemor@2
  001c6	8b 8d 78 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  001cc	8b 51 04	 mov	 edx, DWORD PTR [ecx+4]
  001cf	83 7a 10 00	 cmp	 DWORD PTR [edx+16], 0
  001d3	75 7e		 jne	 SHORT $LN2@CUserMemor@2
$LN1@CUserMemor@2:

; 156  :     {
; 157  :         free(m_pMemStruct);

  001d5	8b 85 78 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
  001db	8b 48 04	 mov	 ecx, DWORD PTR [eax+4]
  001de	51		 push	 ecx
  001df	e8 00 00 00 00	 call	 _free
  001e4	83 c4 04	 add	 esp, 4

; 158  :         free((void*)m_AllocatedBlock);

  001e7	8b 95 78 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  001ed	8b 42 0c	 mov	 eax, DWORD PTR [edx+12]
  001f0	50		 push	 eax
  001f1	e8 00 00 00 00	 call	 _free
  001f6	83 c4 04	 add	 esp, 4

; 159  :         m_AllocatedBlock = NULL;

  001f9	8b 8d 78 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  001ff	c7 41 0c 00 00
	00 00		 mov	 DWORD PTR [ecx+12], 0

; 160  :         m_pMemStruct = NULL;

  00206	8b 95 78 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  0020c	c7 42 04 00 00
	00 00		 mov	 DWORD PTR [edx+4], 0

; 161  :         throw std::runtime_error("Memory mapping failed");

  00213	68 00 00 00 00	 push	 OFFSET ??_C@_0BG@HLJBIOAE@Memory?5mapping?5failed?$AA@
  00218	8d 8d 7c ff ff
	ff		 lea	 ecx, DWORD PTR $T348040[ebp]
  0021e	e8 00 00 00 00	 call	 ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >
  00223	c6 45 fc 01	 mov	 BYTE PTR __$EHRec$[ebp+8], 1
  00227	8d 85 7c ff ff
	ff		 lea	 eax, DWORD PTR $T348040[ebp]
  0022d	50		 push	 eax
  0022e	8d 4d 98	 lea	 ecx, DWORD PTR $T348039[ebp]
  00231	e8 00 00 00 00	 call	 ??0runtime_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z ; std::runtime_error::runtime_error
  00236	68 00 00 00 00	 push	 OFFSET __TI2?AVruntime_error@std@@
  0023b	8d 4d 98	 lea	 ecx, DWORD PTR $T348039[ebp]
  0023e	51		 push	 ecx
  0023f	e8 00 00 00 00	 call	 __CxxThrowException@8
  00244	c6 45 fc 00	 mov	 BYTE PTR __$EHRec$[ebp+8], 0
  00248	8d 8d 7c ff ff
	ff		 lea	 ecx, DWORD PTR $T348040[ebp]
  0024e	e8 00 00 00 00	 call	 ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >
$LN2@CUserMemor@2:

; 162  :     }
; 163  : 
; 164  :     m_pMemStruct->dwPages = nPages;

  00253	8b 95 78 ff ff
	ff		 mov	 edx, DWORD PTR _this$[ebp]
  00259	8b 42 04	 mov	 eax, DWORD PTR [edx+4]
  0025c	8b 4d f0	 mov	 ecx, DWORD PTR _nPages$[ebp]
  0025f	89 48 04	 mov	 DWORD PTR [eax+4], ecx

; 165  : }

  00262	c7 45 fc ff ff
	ff ff		 mov	 DWORD PTR __$EHRec$[ebp+8], -1
  00269	8b 85 78 ff ff
	ff		 mov	 eax, DWORD PTR _this$[ebp]
$LN8@CUserMemor@2:
  0026f	8b 4d f4	 mov	 ecx, DWORD PTR __$EHRec$[ebp]
  00272	64 89 0d 00 00
	00 00		 mov	 DWORD PTR fs:0, ecx
  00279	59		 pop	 ecx
  0027a	8b e5		 mov	 esp, ebp
  0027c	5d		 pop	 ebp
  0027d	c2 08 00	 ret	 8
_TEXT	ENDS
;	COMDAT text$x
text$x	SEGMENT
__unwindfunclet$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z$0:
  00000	8b 8d 78 ff ff
	ff		 mov	 ecx, DWORD PTR _this$[ebp]
  00006	e9 00 00 00 00	 jmp	 ??1CHardwareMemory@@MAE@XZ ; CHardwareMemory::~CHardwareMemory
__unwindfunclet$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z$1:
  0000b	8d 8d 7c ff ff
	ff		 lea	 ecx, DWORD PTR $T348040[ebp]
  00011	e9 00 00 00 00	 jmp	 ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ; std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >
__ehhandler$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z:
  00016	8b 54 24 08	 mov	 edx, DWORD PTR [esp+8]
  0001a	8d 42 0c	 lea	 eax, DWORD PTR [edx+12]
  0001d	8b 4a 80	 mov	 ecx, DWORD PTR [edx-128]
  00020	33 c8		 xor	 ecx, eax
  00022	e8 00 00 00 00	 call	 @__security_check_cookie@4
  00027	b8 00 00 00 00	 mov	 eax, OFFSET __ehfuncinfo$??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z
  0002c	e9 00 00 00 00	 jmp	 ___CxxFrameHandler3
text$x	ENDS
??0CUserMemory@@QAE@PAVCHardwareDriver@@I@Z ENDP	; CUserMemory::CUserMemory
END
