Windows NT 4.0 source code leak
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

#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;
}