00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#include "stdarg.h"
00026
#include "stdio.h"
00027
#include "string.h"
00028
#include "ntrtlp.h"
00029
00030
00031
00032
00033
00034
NTSTATUS
00035
DebugService(
00036 ULONG ServiceClass,
00037 PVOID Arg1,
00038 PVOID Arg2
00039 );
00040
00041 VOID _fptrap() {};
00042
00043
NTSTATUS
00044 DebugPrint(
00045 IN PSTRING Output
00046 )
00047 {
00048
return DebugService( BREAKPOINT_PRINT, Output, 0 );
00049 }
00050
00051
00052 ULONG
00053 DebugPrompt(
00054 IN PSTRING Output,
00055 IN PSTRING Input
00056 )
00057 {
00058
return DebugService( BREAKPOINT_PROMPT, Output, Input );
00059 }
00060
00061
VOID
00062 DebugLoadImageSymbols(
00063 IN PSTRING FileName,
00064 IN
PKD_SYMBOLS_INFO SymbolInfo
00065 )
00066 {
00067
DebugService( BREAKPOINT_LOAD_SYMBOLS,
FileName, SymbolInfo );
00068 }
00069
00070
NTSTATUS
00071 DebugService(
00072 ULONG ServiceClass,
00073 PVOID Arg1,
00074 PVOID Arg2
00075 )
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 {
00096
NTSTATUS RetValue;
00097
00098
#if defined(BUILD_WOW6432)
00099
00100
extern NTSTATUS NtWow64DebuggerCall(ULONG, PVOID, PVOID);
00101 RetValue =
NtWow64DebuggerCall(ServiceClass, Arg1, Arg2);
00102
00103
#else
00104
_asm {
00105 mov eax, ServiceClass
00106 mov ecx, Arg1
00107 mov edx, Arg2
00108
00109
int 2dh ; Raise exception
00110
int 3 ; DO NOT REMOVE (See KiDebugService)
00111
00112 mov RetValue, eax
00113
00114 }
00115
#endif
00116
00117
return RetValue;
00118 }
00119
00120
00121
00122
00123
00124
00125
00126
VOID
00127 DebugUnLoadImageSymbols(
00128 IN PSTRING FileName,
00129 IN
PKD_SYMBOLS_INFO SymbolInfo
00130 )
00131 {
00132
DebugService( BREAKPOINT_UNLOAD_SYMBOLS,
FileName, SymbolInfo );
00133 }
00134