| 1260 | } |
| 1261 | |
| 1262 | NTSTATUS |
| 1263 | DbgkpQueueMessage( |
| 1264 | _In_ PEPROCESS Process, |
| 1265 | _In_ PETHREAD Thread, |
| 1266 | _Inout_ PDBGKM_APIMSG ApiMsg, |
| 1267 | _In_ ULONG Flags, |
| 1268 | _In_ PDEBUG_OBJECT TargetDebugObject |
| 1269 | ) { |
| 1270 | PDEBUG_EVENT DebugEvent; |
| 1271 | DEBUG_EVENT StaticDebugEvent; |
| 1272 | PDEBUG_OBJECT DebugObject = nullptr; |
| 1273 | NTSTATUS status; |
| 1274 | |
| 1275 | auto process = Process; |
| 1276 | auto thread = Thread; |
| 1277 | if (Flags & DEBUG_EVENT_NOWAIT) { |
| 1278 | // POOL_QUOTA_FAIL_INSTEAD_OF_RAISE |
| 1279 | DebugEvent = (PDEBUG_EVENT)ExAllocatePoolWithQuotaTag(NonPagedPool, sizeof(*DebugEvent), 'EgbD'); |
| 1280 | if (DebugEvent == nullptr) { |
| 1281 | return STATUS_INSUFFICIENT_RESOURCES; |
| 1282 | } |
| 1283 | |
| 1284 | DebugEvent->Flags |= DEBUG_EVENT_INACTIVE; |
| 1285 | ObReferenceObject(Process); |
| 1286 | ObReferenceObject(Thread); |
| 1287 | DebugEvent->BackoutThread = PsGetCurrentThread(); |
| 1288 | DebugObject = TargetDebugObject; |
| 1289 | } |
| 1290 | else { |
| 1291 | DebugEvent = &StaticDebugEvent; |
| 1292 | DebugEvent->Flags = Flags; |
| 1293 | ExAcquireFastMutex(g_pDbgkpProcessDebugPortMutex); |
| 1294 | |
| 1295 | //DebugObject = (PDEBUG_OBJECT)process->DebugPort; |
| 1296 | |
| 1297 | if (ApiMsg->ApiNumber == DbgKmCreateProcessApi || |
| 1298 | ApiMsg->ApiNumber == DbgKmCreateProcessApi) { |
| 1299 | /*if (thread->CrossThreadFlags & PS_CROSS_THREAD_FLAGS_SKIP_CREATION_MSG) { |
| 1300 | DebugObject = nullptr; |
| 1301 | }*/ |
| 1302 | } |
| 1303 | |
| 1304 | /*if (ApiMsg->ApiNumber == DbgKmLoadDllApi && |
| 1305 | thread->CrossThreadFlags & PS_CROSS_THREAD_FLAGS_SKIP_CREATION_MSG && |
| 1306 | Flags & 0x40) { |
| 1307 | DebugObject = nullptr; |
| 1308 | }*/ |
| 1309 | |
| 1310 | if (ApiMsg->ApiNumber == DbgKmExitThreadApi || |
| 1311 | ApiMsg->ApiNumber == DbgKmExitProcessApi) { |
| 1312 | /* if (thread->CrossThreadFlags & PS_CROSS_THREAD_FLAGS_SKIP_TERMINATION_MSG) { |
| 1313 | DebugObject = nullptr; |
| 1314 | }*/ |
| 1315 | } |
| 1316 | |
| 1317 | KeInitializeEvent(&DebugEvent->ContinueEvent, SynchronizationEvent, FALSE); |
| 1318 | } |
| 1319 |
no test coverage detected