mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
3.5 KiB
173 lines
3.5 KiB
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include "null.h"
|
|
|
|
HANDLE NullApiPort;
|
|
|
|
NTSTATUS
|
|
Null1 (
|
|
ULONG Long1
|
|
)
|
|
{
|
|
NTSTATUS st;
|
|
NULLAPIMSG ApiMsg;
|
|
PNULL1 args = &ApiMsg.u.Null1;
|
|
|
|
args->Long1 = Long1;
|
|
|
|
ApiMsg.ApiNumber = Null1Api;
|
|
ApiMsg.h.u1.s1.DataLength = sizeof(*args) + 8;
|
|
ApiMsg.h.u1.s1.TotalLength = sizeof(ApiMsg);
|
|
ApiMsg.h.u2.ZeroInit = 0L;
|
|
|
|
st = NtRequestWaitReplyPort(
|
|
NullApiPort,
|
|
(PPORT_MESSAGE) &ApiMsg,
|
|
(PPORT_MESSAGE) &ApiMsg
|
|
);
|
|
|
|
if ( NT_SUCCESS(st) ) {
|
|
st = ApiMsg.ReturnedStatus;
|
|
} else {
|
|
printf("NULL1: NtRequestWaitReply Failed %lx\n",st);
|
|
ExitProcess(1);
|
|
}
|
|
return st;
|
|
}
|
|
|
|
|
|
NTSTATUS
|
|
Null4 (
|
|
ULONG Longs[4]
|
|
)
|
|
{
|
|
NTSTATUS st;
|
|
NULLAPIMSG ApiMsg;
|
|
PNULL4 args = &ApiMsg.u.Null4;
|
|
|
|
RtlMoveMemory(&args->Longs,Longs,4 * 4);
|
|
|
|
ApiMsg.ApiNumber = Null4Api;
|
|
ApiMsg.h.u1.s1.DataLength = sizeof(*args) + 8;
|
|
ApiMsg.h.u1.s1.TotalLength = sizeof(ApiMsg);
|
|
ApiMsg.h.u2.ZeroInit = 0L;
|
|
|
|
st = NtRequestWaitReplyPort(
|
|
NullApiPort,
|
|
(PPORT_MESSAGE) &ApiMsg,
|
|
(PPORT_MESSAGE) &ApiMsg
|
|
);
|
|
|
|
if ( NT_SUCCESS(st) ) {
|
|
st = ApiMsg.ReturnedStatus;
|
|
} else {
|
|
printf("NULL4: NtRequestWaitReply Failed %lx\n",st);
|
|
ExitProcess(1);
|
|
}
|
|
return st;
|
|
}
|
|
|
|
NTSTATUS
|
|
Null8 (
|
|
ULONG Longs[8]
|
|
)
|
|
{
|
|
NTSTATUS st;
|
|
NULLAPIMSG ApiMsg;
|
|
PNULL8 args = &ApiMsg.u.Null8;
|
|
|
|
RtlMoveMemory(&args->Longs,Longs,8 * 4);
|
|
|
|
ApiMsg.ApiNumber = Null8Api;
|
|
ApiMsg.h.u1.s1.DataLength = sizeof(*args) + 8;
|
|
ApiMsg.h.u1.s1.TotalLength = sizeof(ApiMsg);
|
|
ApiMsg.h.u2.ZeroInit = 0L;
|
|
|
|
st = NtRequestWaitReplyPort(
|
|
NullApiPort,
|
|
(PPORT_MESSAGE) &ApiMsg,
|
|
(PPORT_MESSAGE) &ApiMsg
|
|
);
|
|
|
|
if ( NT_SUCCESS(st) ) {
|
|
st = ApiMsg.ReturnedStatus;
|
|
} else {
|
|
printf("NULL8: NtRequestWaitReply Failed %lx\n",st);
|
|
ExitProcess(1);
|
|
}
|
|
return st;
|
|
}
|
|
|
|
NTSTATUS
|
|
Null16 (
|
|
ULONG Longs[16]
|
|
)
|
|
{
|
|
NTSTATUS st;
|
|
NULLAPIMSG ApiMsg;
|
|
PNULL16 args = &ApiMsg.u.Null16;
|
|
|
|
RtlMoveMemory(&args->Longs,Longs,16 * 4);
|
|
|
|
ApiMsg.ApiNumber = Null16Api;
|
|
ApiMsg.h.u1.s1.DataLength = sizeof(*args) + 8;
|
|
ApiMsg.h.u1.s1.TotalLength = sizeof(ApiMsg);
|
|
ApiMsg.h.u2.ZeroInit = 0L;
|
|
|
|
st = NtRequestWaitReplyPort(
|
|
NullApiPort,
|
|
(PPORT_MESSAGE) &ApiMsg,
|
|
(PPORT_MESSAGE) &ApiMsg
|
|
);
|
|
|
|
if ( NT_SUCCESS(st) ) {
|
|
st = ApiMsg.ReturnedStatus;
|
|
} else {
|
|
printf("NULL16: NtRequestWaitReply Failed %lx\n",st);
|
|
ExitProcess(1);
|
|
}
|
|
return st;
|
|
}
|
|
|
|
NTSTATUS
|
|
NullConnect (
|
|
VOID
|
|
)
|
|
{
|
|
NTSTATUS st;
|
|
UNICODE_STRING PortName;
|
|
HANDLE CommunicationPort;
|
|
SECURITY_QUALITY_OF_SERVICE DynamicQos;
|
|
|
|
//
|
|
// Set up the security quality of service parameters to use over the
|
|
// port. Use the most efficient (least overhead) - which is dynamic
|
|
// rather than static tracking.
|
|
//
|
|
|
|
DynamicQos.ImpersonationLevel = SecurityImpersonation;
|
|
DynamicQos.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING;
|
|
DynamicQos.EffectiveOnly = TRUE;
|
|
|
|
RtlInitUnicodeString(&PortName,L"\\NullSrv");
|
|
|
|
st = NtConnectPort(
|
|
&NullApiPort,
|
|
&PortName,
|
|
&DynamicQos,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
0L
|
|
);
|
|
|
|
if ( !NT_SUCCESS(st) ) {
|
|
printf("NULL: Connect Failed %lx\n",st);
|
|
return st;
|
|
}
|
|
|
|
return st;
|
|
|
|
}
|