16{
17 CONTEXT OriginalContext, InOutContext, CapturedContext;
20
21
22 MaxIndex =
sizeof(OriginalContext) /
sizeof(
USHORT);
25 {
27 }
28
29
30 OriginalContext.
EFlags = 0xE7F;
31
32
33 OriginalContext.FltSave.ControlWord = 0x27f;
34 OriginalContext.FltSave.StatusWord = 0x1234;
35 OriginalContext.FltSave.TagWord = 0xab;
36 OriginalContext.FltSave.Reserved1 = 0x75;
37 OriginalContext.FltSave.MxCsr = 0x1f80;
38 OriginalContext.FltSave.MxCsr_Mask = 0xabcde;
39
40
41 OriginalContext.MxCsr = 0xffff;
42
43
44 InOutContext = OriginalContext;
45
46
47 RtlFillMemory(&CapturedContext,
sizeof(CapturedContext), 0xCC);
48
49
51
52
53 ok_eq_hex64(CapturedContext.P1Home, 0xccccccccccccccccULL);
54 ok_eq_hex64(CapturedContext.P2Home, 0xccccccccccccccccULL);
55 ok_eq_hex64(CapturedContext.P3Home, 0xccccccccccccccccULL);
56 ok_eq_hex64(CapturedContext.P4Home, 0xccccccccccccccccULL);
57 ok_eq_hex64(CapturedContext.P5Home, 0xccccccccccccccccULL);
58 ok_eq_hex64(CapturedContext.P6Home, 0xccccccccccccccccULL);
65 ok_eq_hex64(CapturedContext.VectorControl, 0xccccccccccccccccULL);
66 ok_eq_hex64(CapturedContext.DebugControl, 0xccccccccccccccccULL);
67 ok_eq_hex64(CapturedContext.LastBranchToRip, 0xccccccccccccccccULL);
68 ok_eq_hex64(CapturedContext.LastBranchFromRip, 0xccccccccccccccccULL);
69 ok_eq_hex64(CapturedContext.LastExceptionToRip, 0xccccccccccccccccULL);
70 ok_eq_hex64(CapturedContext.LastExceptionFromRip, 0xccccccccccccccccULL);
72 {
74 }
76 {
77 ok_eq_hex64(CapturedContext.VectorRegister[
Index].Low, 0xccccccccccccccccULL);
78 ok_eq_hex64(CapturedContext.VectorRegister[
Index].High, 0xccccccccccccccccULL);
79 }
80
81
83
84
85 ok_eq_hex(CapturedContext.MxCsr, OriginalContext.MxCsr);
86 ok_eq_hex64(CapturedContext.Rax, OriginalContext.Rax);
88 ok_eq_hex64(CapturedContext.Rdx, OriginalContext.Rdx);
89 ok_eq_hex64(CapturedContext.Rbx, OriginalContext.Rbx);
90 ok_eq_hex64(CapturedContext.Rbp, OriginalContext.Rbp);
91 ok_eq_hex64(CapturedContext.Rsi, OriginalContext.Rsi);
92 ok_eq_hex64(CapturedContext.Rdi, OriginalContext.Rdi);
98 ok_eq_hex64(CapturedContext.R13, OriginalContext.R13);
99 ok_eq_hex64(CapturedContext.R14, OriginalContext.R14);
100 ok_eq_hex64(CapturedContext.R15, OriginalContext.R15);
101
102 ok_eq_xmm(CapturedContext.Xmm0, OriginalContext.Xmm0);
103 ok_eq_xmm(CapturedContext.Xmm1, OriginalContext.Xmm1);
104 ok_eq_xmm(CapturedContext.Xmm2, OriginalContext.Xmm2);
105 ok_eq_xmm(CapturedContext.Xmm3, OriginalContext.Xmm3);
106 ok_eq_xmm(CapturedContext.Xmm4, OriginalContext.Xmm4);
107 ok_eq_xmm(CapturedContext.Xmm5, OriginalContext.Xmm5);
108 ok_eq_xmm(CapturedContext.Xmm6, OriginalContext.Xmm6);
109 ok_eq_xmm(CapturedContext.Xmm7, OriginalContext.Xmm7);
110 ok_eq_xmm(CapturedContext.Xmm8, OriginalContext.Xmm8);
111 ok_eq_xmm(CapturedContext.Xmm9, OriginalContext.Xmm9);
112 ok_eq_xmm(CapturedContext.Xmm10, OriginalContext.Xmm10);
113 ok_eq_xmm(CapturedContext.Xmm11, OriginalContext.Xmm11);
114 ok_eq_xmm(CapturedContext.Xmm12, OriginalContext.Xmm12);
115 ok_eq_xmm(CapturedContext.Xmm13, OriginalContext.Xmm13);
116 ok_eq_xmm(CapturedContext.Xmm14, OriginalContext.Xmm14);
117 ok_eq_xmm(CapturedContext.Xmm15, OriginalContext.Xmm15);
118
119
121
122#ifndef KMT_KERNEL_MODE
123 ok_eq_hex(CapturedContext.FltSave.ControlWord, 0x27f);
124 ok_eq_hex(CapturedContext.FltSave.StatusWord, OriginalContext.FltSave.StatusWord);
125 ok_eq_hex(CapturedContext.FltSave.TagWord, OriginalContext.FltSave.TagWord);
126 ok_eq_hex(CapturedContext.FltSave.Reserved1, 0x00);
127 ok_eq_hex(CapturedContext.FltSave.MxCsr_Mask, 0xffff);
128 ok_eq_hex(CapturedContext.FltSave.ErrorOpcode, 0x00000083);
129 ok_eq_hex(CapturedContext.FltSave.ErrorOffset, 0x00850084);
130 ok_eq_hex(CapturedContext.FltSave.ErrorSelector, 0x0086);
131 ok_eq_hex(CapturedContext.FltSave.Reserved2, 0x0000);
132 ok_eq_hex(CapturedContext.FltSave.DataOffset, 0x00890088);
133 ok_eq_hex(CapturedContext.FltSave.DataSelector, 0x008a);
134 ok_eq_hex(CapturedContext.FltSave.Reserved3, 0x0000);
135#else
136 ok_eq_hex(CapturedContext.FltSave.ControlWord, 0xcccc);
137 ok_eq_hex(CapturedContext.FltSave.StatusWord, 0xcccc);
138 ok_eq_hex(CapturedContext.FltSave.TagWord, 0xcc);
139 ok_eq_hex(CapturedContext.FltSave.Reserved1, 0xcc);
140 ok_eq_hex(CapturedContext.FltSave.MxCsr_Mask, 0xcccccccc);
141 ok_eq_hex(CapturedContext.FltSave.ErrorOpcode, 0xcccc);
142 ok_eq_hex(CapturedContext.FltSave.ErrorOffset, 0xcccccccc);
143 ok_eq_hex(CapturedContext.FltSave.ErrorSelector, 0xcccc);
144 ok_eq_hex(CapturedContext.FltSave.Reserved2, 0xcccc);
145 ok_eq_hex(CapturedContext.FltSave.DataOffset, 0xcccccccc);
146 ok_eq_hex(CapturedContext.FltSave.DataSelector, 0xcccc);
147 ok_eq_hex(CapturedContext.FltSave.Reserved3, 0xcccc);
148#endif
149
150
151 ok_eq_hex(CapturedContext.FltSave.MxCsr, OriginalContext.MxCsr);
152
153
154 ok_eq_hex64(CapturedContext.Legacy[0].Low, OriginalContext.Legacy[0].Low);
155 ok_eq_hex64(CapturedContext.Legacy[0].High, OriginalContext.Legacy[0].High & 0xFF);
156 ok_eq_hex64(CapturedContext.Legacy[1].Low, OriginalContext.Legacy[1].Low);
157 ok_eq_hex64(CapturedContext.Legacy[1].High, OriginalContext.Legacy[1].High & 0xFF);
158 ok_eq_hex64(CapturedContext.Legacy[2].Low, OriginalContext.Legacy[2].Low);
159 ok_eq_hex64(CapturedContext.Legacy[2].High, OriginalContext.Legacy[2].High & 0xFF);
160 ok_eq_hex64(CapturedContext.Legacy[3].Low, OriginalContext.Legacy[3].Low);
161 ok_eq_hex64(CapturedContext.Legacy[3].High, OriginalContext.Legacy[3].High & 0xFF);
162 ok_eq_hex64(CapturedContext.Legacy[4].Low, OriginalContext.Legacy[4].Low);
163 ok_eq_hex64(CapturedContext.Legacy[4].High, OriginalContext.Legacy[4].High & 0xFF);
164 ok_eq_hex64(CapturedContext.Legacy[5].Low, OriginalContext.Legacy[5].Low);
165 ok_eq_hex64(CapturedContext.Legacy[5].High, OriginalContext.Legacy[5].High & 0xFF);
166 ok_eq_hex64(CapturedContext.Legacy[6].Low, OriginalContext.Legacy[6].Low);
167 ok_eq_hex64(CapturedContext.Legacy[6].High, OriginalContext.Legacy[6].High & 0xFF);
168 ok_eq_hex64(CapturedContext.Legacy[7].Low, OriginalContext.Legacy[7].Low);
169 ok_eq_hex64(CapturedContext.Legacy[7].High, OriginalContext.Legacy[7].High & 0xFF);
170
171
178
179
180 ok_eq_hex64(CapturedContext.Rsp, InOutContext.Rsp);
181 ok_eq_hex64(CapturedContext.Rip, InOutContext.Rip);
182
183
184 ok_eq_xmm(InOutContext.Xmm0, OriginalContext.Xmm0);
185 ok_eq_xmm(InOutContext.Xmm1, OriginalContext.Xmm1);
186 ok_eq_xmm(InOutContext.Xmm2, OriginalContext.Xmm2);
187 ok_eq_xmm(InOutContext.Xmm3, OriginalContext.Xmm3);
188 ok_eq_xmm(InOutContext.Xmm4, OriginalContext.Xmm4);
189 ok_eq_xmm(InOutContext.Xmm5, OriginalContext.Xmm5);
190 ok_eq_xmm(InOutContext.Xmm6, OriginalContext.Xmm6);
191 ok_eq_xmm(InOutContext.Xmm7, OriginalContext.Xmm7);
192 ok_eq_xmm(InOutContext.Xmm8, OriginalContext.Xmm8);
193 ok_eq_xmm(InOutContext.Xmm9, OriginalContext.Xmm9);
194 ok_eq_xmm(InOutContext.Xmm10, OriginalContext.Xmm10);
195 ok_eq_xmm(InOutContext.Xmm11, OriginalContext.Xmm11);
196 ok_eq_xmm(InOutContext.Xmm12, OriginalContext.Xmm12);
197 ok_eq_xmm(InOutContext.Xmm13, OriginalContext.Xmm13);
198 ok_eq_xmm(InOutContext.Xmm14, OriginalContext.Xmm14);
199 ok_eq_xmm(InOutContext.Xmm15, OriginalContext.Xmm15);
200 ok_eq_hex64(InOutContext.Rdx, OriginalContext.Rdx);
201 ok_eq_hex64(InOutContext.Rbx, OriginalContext.Rbx);
202 ok_eq_hex64(InOutContext.Rbp, OriginalContext.Rbp);
203 ok_eq_hex64(InOutContext.Rsi, OriginalContext.Rsi);
204 ok_eq_hex64(InOutContext.Rdi, OriginalContext.Rdi);
210 ok_eq_hex64(InOutContext.R13, OriginalContext.R13);
211 ok_eq_hex64(InOutContext.R14, OriginalContext.R14);
212 ok_eq_hex64(InOutContext.R15, OriginalContext.R15);
213
214
216
217
218 ok_eq_hex(InOutContext.MxCsr, OriginalContext.MxCsr);
219 ok_eq_hex(InOutContext.FltSave.MxCsr, OriginalContext.MxCsr);
220
221
223
224
226
227
228 OriginalContext.
EFlags = 0x200;
229 OriginalContext.MxCsr = 0x0000;
230 InOutContext = OriginalContext;
231 RtlFillMemory(&CapturedContext,
sizeof(CapturedContext), 0xCC);
233
234
236
237
239
240
241 ok_eq_hex64(InOutContext.MxCsr, CapturedContext.MxCsr);
242 ok_eq_hex64(CapturedContext.MxCsr, OriginalContext.MxCsr);
243}
VOID RtlCaptureContextWrapper(_Inout_ PCONTEXT InOutContext, _Out_ PCONTEXT CapturedContext)
#define ok_eq_hex(value, expected)
#define ok_eq_hex64(value, expected)
#define ok_eq_xmm(value, expected)
#define RtlFillMemory(Dest, Length, Fill)
_In_ WDFCOLLECTION _In_ ULONG Index