/* * reactos/apps/lpc/creport.c * * To be run in a real WNT 4.0 system to * create an LPC named port. * * Use Russinovich' HandleEx to verify * creport.exe owns the named LPC port * you asked to create. */ #include #include #include #define PROTO_LPC #include #include "dumpinfo.h" #define LPC_CONNECT_FLAG1 0x00000001 #define LPC_CONNECT_FLAG2 0x00000010 #define LPC_CONNECT_FLAG3 0x00000100 #define LPC_CONNECT_FLAG4 0x00001000 #define LPC_CONNECT_FLAG5 0x00010000 NTSTATUS (WINAPI * CreatePort)( /*OUT PHANDLE PortHandle,*/ PVOID Buffer, IN POBJECT_ATTRIBUTES PortAttributes OPTIONAL, IN ACCESS_MASK DesiredAccess, IN DWORD Unknown3, IN ULONG Flags ); NTSTATUS (WINAPI * QueryObject)( IN HANDLE ObjectHandle, IN CINT ObjectInformationClass, OUT PVOID ObjectInformation, IN ULONG Length, OUT PULONG ResultLength ); NTSTATUS (WINAPI * YieldExecution)(VOID); #define BUF_SIZE 1024 #define MAXARG 5000000 VOID TryCreatePort(char *port_name) { DWORD Status = 0; HANDLE Port = 0; int i; UNICODE_STRING PortName; OBJECT_ATTRIBUTES ObjectAttributes; WORD Name [BUF_SIZE] = {0}; int dwx = 0; char * port_name_save = port_name; /* * Convert the port's name to Unicode. */ for ( PortName.Length = 0; ( *port_name && (PortName.Length < BUF_SIZE) ); ) { Name[PortName.Length++] = (WORD) *port_name++; } Name[PortName.Length] = 0; PortName.Length = PortName.Length * sizeof (WORD); PortName.MaximumLength = PortName.Length + sizeof (WORD); PortName.Buffer = (PWSTR) Name; /* * Prepare the port object attributes. */ ObjectAttributes.Length = sizeof (OBJECT_ATTRIBUTES); ObjectAttributes.RootDirectory = NULL; ObjectAttributes.ObjectName = & PortName; ObjectAttributes.Attributes = 0; //OBJ_CASE_INSENSITIVE --> STATUS_INVALID_PARAMETER ==> case sensitive!; ObjectAttributes.SecurityDescriptor = NULL; ObjectAttributes.SecurityQualityOfService = NULL; /* * Try to issue a connection request. */ Port = 0; Status = CreatePort( & Port, & ObjectAttributes, 0, /* ACCESS_MASK? */ 0, /* Unknown3 */ LPC_CONNECT_FLAG5 ); if (Status == STATUS_SUCCESS) { DumpInfo( Name, Status, "created", Port ); /* Hot waiting */ for (dwx=0; dwx