в драйвере: Код (Text): DWORD NTAPI ZwTest(PDWORD arg) { if(!arg) return -1; __try { *arg = 0xdeadbeef; } __except(1) { return 0x666; } return 1; } PVOID m_ppNewServiceTable[] = { ZwTest, 0 }; UCHAR m_pbNewArgumentTable[] = { 4, 0 }; ULONG m_ulIndex = 0; // <- DRV.m_ulSstIndex bool (NTAPI* KeAddSystemServiceTable)(PPVOID Base, PULONG Count OPTIONAL, ULONG Limit, PUCHAR Number, ULONG Index); bool (NTAPI* KeRemoveSystemServiceTable )(IN ULONG Index); VOID AddSystemServiceTable() { UNICODE_STRING us; RtlInitUnicodeString(&us, L"KeAddSystemServiceTable"); *(PPVOID)&KeAddSystemServiceTable = MmGetSystemRoutineAddress(&us); if(!KeAddSystemServiceTable) return; for(ULONG Index = 0; Index < 4 && !m_ulIndex; Index++) if(KeAddSystemServiceTable(m_ppNewServiceTable, NULL, 1, m_pbNewArgumentTable, Index)) m_ulIndex = Index; DPRINT("KeAddSystemServiceTable -> %i", m_ulIndex); } VOID RemoveSystemServiceTable() { UNICODE_STRING us; RtlInitUnicodeString(&us, L"KeRemoveSystemServiceTable"); *(PPVOID)&KeRemoveSystemServiceTable = MmGetSystemRoutineAddress(&us); if(KeRemoveSystemServiceTable && m_ulIndex) KeRemoveSystemServiceTable(m_ulIndex); } функция добавляется, но работать с указателем на переменную в стеке отказывается а со статичными все пашет Код (Text): DWORD ZwTestId = NULL; _declspec (naked) DWORD NTAPI ZwTest(PDWORD arg) { _asm { mov eax, ZwTestId call KiFastSystemCall ret 4 KiFastSystemCall: mov edx, esp __emit 0Fh __emit 34h ret } } void Check() { ZwTestId = (DRV.m_ulSstIndex << 0x0C) | 0 ; char x[512]; DWORD xxx = 0x4321; - если статик, то все ок :( ULONG xx = ZwTest(&xxx); wsprintf(x, "%X %X", xx, xxx ); MessageBox(0, x, 0, 0); }
ладно, хрен с ним и так норм. пашет еще вопросик. возможно получить юзермодный контекст потока из ETHREAD? (без вызова функций. есть только ETHREAD (получаемый в SwapContext) и всё)
и еще вопросик один хрен расковыряю сам, однако задам переключатель контекстов от процесса к процесса переключает потоки, при этом сам он при этом находитяс в адресном пространстве *обрабатываемого процесса*? о_О