Здравствуйте!
Помогите решить проблему при работе с LPC.
Приложение создает серверный порт и ждет подключений в отдельном потоке.
Клиент в пользовательском режиме подключается к серверу без проблем. Но если код клиента выполняется в драйвере, то
функция NtConnectPort возвращает ошибку 0xC000005.
В чем может быть проблема?
Код сервера:
NTSTATUS stat = 0;
LPC_DATA_MESSAGE msg;
HANDLE Client = NULL;
SECURITY_DESCRIPTOR sd;
UNICODE_STRING portName;
DWORD lastErr;
if(!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION))
return;
if(!SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE))
return;
RtlInitUnicodeString(&portName, Name.c_str());
OBJECT_ATTRIBUTES portAttr;
InitializeObjectAttributes(&portAttr, &portName, OBJ_CASE_INSENSITIVE , NULL, &sd);
size_t msgSize = sizeof(LPC_DATA_MESSAGE);
stat = NtCreatePort(&Port, &portAttr, 0 , msgSize, 0);
while(Stop == false)
{
stat = NtListenPort(Port, &msg.Header);
stat = NtAcceptConnectPort(&Client, NULL,&msg.Header, TRUE, NULL, NULL);
stat = NtCompleteConnectPort(Client);
stat = NtReplyWaitReceivePort(Client, NULL, NULL, &msg.Header);
................
}
Код клиента:
NTSTATUS stat;
UNICODE_STRING name;
RtlInitUnicodeString(&name, portName);
SECURITY_QUALITY_OF_SERVICE securityQos;
securityQos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE);
securityQos.ImpersonationLevel = SecurityAnonymous,
securityQos.ContextTrackingMode = 0;
securityQos.EffectiveOnly = 0;
// в режиме ядра возвращается ошибка
stat = NtConnectPort(&Port,
&name,
&securityQos,
NULL,
NULL,
0,
NULL,
NULL);