|
Может кому будет интересно - вот функция (недокумент.), показывает все пипы в системе (выдрано из проекта, модет не очень работать, но мысля есть): <br>#include <windows.h><br>#include <stdio.h><br><br>#define FileDirectoryInformation 1<br>#define STATUS_NO_MORE_FILES 0x80000006L<br><br>typedef struct<br>{<br> USHORT Length;<br> USHORT MaximumLength;<br> PWSTR Buffer;<br>} UNICODE_STRING, *PUNICODE_STRING;<br><br>typedef struct<br>{<br> LONG Status;<br> ULONG Information;<br>} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;<br><br>typedef struct {<br> ULONG NextEntryOffset;<br> ULONG FileIndex;<br> LARGE_INTEGER CreationTime;<br> LARGE_INTEGER LastAccessTime;<br> LARGE_INTEGER LastWriteTime;<br> LARGE_INTEGER ChangeTime;<br> LARGE_INTEGER EndOfFile;<br> LARGE_INTEGER AllocationSize;<br> ULONG FileAttributes;<br> ULONG FileNameLength;<br> union {<br> struct {<br> WCHAR FileName[1];<br> } FileDirectoryInformationClass;<br><br> struct {<br> DWORD dwUknown1;<br> WCHAR FileName[1];<br> } FileFullDirectoryInformationClass;<br><br> struct {<br> DWORD dwUknown2;<br> USHORT AltFileNameLen;<br> WCHAR AltFileName[12];<br> WCHAR FileName[1];<br> } FileBothDirectoryInformationClass;<br> };<br>} FILE_QUERY_DIRECTORY, *PFILE_QUERY_DIRECTORY;<br><br><br>typedef LONG (WINAPI *PROCNTQDF)( HANDLE,HANDLE,PVOID,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,<br> UINT,BOOL,PUNICODE_STRING,BOOL );<br><br>PROCNTQDF NtQueryDirectoryFile;<br>void main(void)<br>{<br> LONG ntStatus;<br> IO_STATUS_BLOCK IoStatus;<br> HANDLE hPipe;<br> BOOL bReset = TRUE;<br> PFILE_QUERY_DIRECTORY DirInfo,<br> TmpInfo;<br><br><br> NtQueryDirectoryFile = (PROCNTQDF)GetProcAddress(<br> GetModuleHandle("ntdll"),<br> "NtQueryDirectoryFile"<br> );<br><br> if (!NtQueryDirectoryFile)<br> return;<br><br> hPipe = CreateFile("\\\\.\\Pipe\\",GENERIC_READ,<br> FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,<br> NULL,OPEN_EXISTING,0,NULL);<br><br> if(hPipe == INVALID_HANDLE_VALUE) return;<br><br> DirInfo = (PFILE_QUERY_DIRECTORY) new BYTE[1024];<br><br> printf("Pipe name (Number of instances, Maximum instances)\n\n");<br> while(1)<br> {<br> ntStatus = NtQueryDirectoryFile(hPipe,NULL,NULL,NULL,&IoStatus,DirInfo,1024,<br> FileDirectoryInformation,FALSE,NULL,bReset);<br><br> if (ntStatus!=NO_ERROR)<br> {<br> if (ntStatus == STATUS_NO_MORE_FILES) break;<br> return;<br> }<br><br> TmpInfo = DirInfo;<br> while(1)<br> {<br> if(TmpInfo->NextEntryOffset==0)<br> break;<br><br> TmpInfo->FileDirectoryInformationClass.FileName[TmpInfo->FileNameLength/sizeof(WCHAR)] = NULL;<br><br> wprintf(L"\%s (\%d, \%d)\n",TmpInfo->FileDirectoryInformationClass.FileName,<br> TmpInfo->EndOfFile.LowPart,<br> TmpInfo->AllocationSize.LowPart );<br><br> TmpInfo = (PFILE_QUERY_DIRECTORY)((DWORD)TmpInfo+TmpInfo->NextEntryOffset);<br> }<br><br> bReset = FALSE;<br> }<br><br> delete DirInfo;<br> CloseHandle(hPipe);<br>}<br><br>
|