windows - Få proces info forespørgsel inde TDI filter driver

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg begynder at skrive en TDI filterdriver, og en af ​​de ting, jeg gerne vil vide, er, hvilken proces der genererer anmodningerne. Jeg gætter på info er tilgængelig et sted i (for det meste ikke-dokumenterede) strukturer. For eksempel får jeg for tiden IP-adressen og porten i TDI\_CONNECT-hændelsen som denne:


stackIrp = IoGetCurrentIrpStackLocation(irp);
connectRequest = (TDI\_REQUEST\_KERNEL\_CONNECT*) &stackIrp->Parameters;
transportAddr = (TRANSPORT\_ADDRESS*) connectRequest->RequestConnectionInformation->RemoteAddress;
taAddr = (TA\_ADDRESS*) transportAddr->Address;
ipAddr = (TDI\_ADDRESS\_IP*) taAddr->Address;


Må jeg ende med at få fat i sokkelhåndtaget, og jeg skal arbejde baglæns for at få procesoplysninger, eller får jeg et proces-id et eller andet sted?


I sidste instans vil jeg gerne vide procesoplysningerne (EXE navn, håndtere osv.), Men skal også kende Windows-brugeren, der ejer sessionen processen kører i. Fordi jeg skriver endnu en hjemmeside filtreringsapp, og ligesom alle de andre, der er nødvendige for at tillade forskellige muligheder pr. bruger.

Bedste reference


Du kan bruge 'IoGetRequestorProcessId' -rutinen, som beskrevet på http://msdn.microsoft.com/en-us/library/windows/hardware/ff548391(v=vs.85).aspx for at få en unik 32-bit ULONG proces id for den tråd, der oprindeligt anmodede om en given I/O-operation. [2]


Når du har fået proces-id'en, kan du hente procesoplysningerne, som f.eks. EXE-navn, moduler, eksekveringssti og noget andet i en brugertilstandsapplikation.