http://www.wasm.ru/forum/viewtopic.php?id=12561 http://www.wasm.ru/forum/viewtopic.php?id=7728 Везде говорят, что ее вызов на синхронных хэндлах, например, именованных каналах, может приводить к зависанию. Попробовал сейчас для проверки (обработка ошибок опущена): Код (Text): HANDLE hReadPipe; TCHAR sss[1000]; NTSTATUS nts; ZeroMemory(sss, sizeof(sss)); hReadPipe= CreateNamedPipe(L"\\\\.\\pipe\\pipename", PIPE_ACCESS_INBOUND, PIPE_TYPE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 0x1000, 0x1000, 1000000, NULL); nts= NtQueryObject(hReadPipe, ObjectNameInformation, sss, sizeof(sss), &u); _tprintf(L"%s\n", ((PUNICODE_STRING)sss)->Buffer); так и пишет в выводе: Код (Text): \Device\NamedPipe\pipename тестил на XP SP1 (ntdll.dll 5.1.2600.1106, ntoskrnl.exe 5.1.2600.1634) Вопрос: что я делаю не так, и стоит ли рассчитывать, что это будет работать везде?
что вроде так в юзермоде (просто пример) Код (Text): ULONG size = 0x2000; DWORD ret=0; NtQueryObject (Handle,ObjectNameInformation,NULL,0,&size ); if(size==0) size = 0x2000; PUNICODE_STRING lpBuffer=(PUNICODE_STRING)LocalAlloc(LMEM_ZEROINIT,size); NtQueryObject(Handle,ObjectNameInformation,(PVOID)lpBuffer, size, &ret ); MessageBoxW(NULL,lpBuffer->Buffer,0,0); LocalFree(lpBuffer);
RET в общем, месседж вылазиет без вопросов со все той же строкой - "\Device\NamedPipe\pipename" вопрос не в том, почему не работает, а в том, почему не зависает )
RET да, действительно (я до этого пытался заставить его "что-то делать" в другом потоке, но с тем же результатом - как оказалось, неправильно пытался) все, получилось, функция замечательно виснет, благодарю за ответы, тема закрыта )