| 17 | |
| 18 | |
| 19 | NTSTATUS CommPort::StartServer(PFLT_FILTER Filter, LPCWSTR PortName,_OnMessage OnMessage,LONG MaxConnections, OPTIONAL PVOID Cookie) |
| 20 | { |
| 21 | if (ServerPort) |
| 22 | StopServer(); |
| 23 | |
| 24 | ParentFilter = Filter; |
| 25 | OnMessageCallback = OnMessage; |
| 26 | |
| 27 | ServerCookie.ServerInstance = this; |
| 28 | ServerCookie.UserCookie = Cookie; |
| 29 | |
| 30 | UNICODE_STRING Name = {}; |
| 31 | RtlInitUnicodeString(&Name, PortName); |
| 32 | |
| 33 | PSECURITY_DESCRIPTOR SecurityDescriptor = NULL; |
| 34 | NTSTATUS Status = FltBuildDefaultSecurityDescriptor(&SecurityDescriptor, FLT_PORT_ALL_ACCESS); |
| 35 | if (!NT_SUCCESS(Status)) |
| 36 | { |
| 37 | KdPrint(("[Kernel-Bridge]: Create security descriptor failure (0x%X)\r\n", Status)); |
| 38 | return Status; |
| 39 | } |
| 40 | |
| 41 | OBJECT_ATTRIBUTES ObjectAttributes = {}; |
| 42 | InitializeObjectAttributes(&ObjectAttributes, &Name, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, SecurityDescriptor); |
| 43 | |
| 44 | Status = FltCreateCommunicationPort(ParentFilter, &ServerPort, &ObjectAttributes, &ServerCookie, OnConnectInternal, OnDisconnectInternal,OnMessageInternal, MaxConnections); |
| 45 | |
| 46 | FltFreeSecurityDescriptor(SecurityDescriptor); |
| 47 | |
| 48 | if (NT_SUCCESS(Status)) |
| 49 | KdPrint(("[Kernel-Bridge]: Comm.Port created!\r\n")); |
| 50 | else |
| 51 | KdPrint(("[Kernel-Bridge]: Comm.Port failure: 0x%X\r\n", Status)); |
| 52 | |
| 53 | return Status; |
| 54 | } |
| 55 | |
| 56 | VOID CommPort::StopServer() |
| 57 | { |
no test coverage detected