Próbuję powiązać zakończenie polecenia CompleteRequest z procesorem, który pierwotnie wysłał żądanie. Czy istnieje sposób na odzyskanie procesora, który wysłał żądanie podczas FdoDeviceControl lub w inny sposób, aby zobaczyć, skąd pochodzi żądanie, zanim wszedł do kolejki wysyłkowej?Czy można odzyskać procesor, który utworzył WDFREQUEST?
Odpowiedz
Gdy jesteś w procedurze DPC, jest już za późno na określenie, skąd pochodzi żądanie. Przed kolejkowaniem żądania do kolejki DPC należy wywołać funkcję KeGetCurrentProcessorNumberEx(). Zakładam, że wniosek jest IRP ...?
David, używam KMDF do obsługi żądania, więc IRP jest zawijany w strukturze WDFREQUEST. W momencie, gdy widzę żądanie, to już przeszło przez kolejkę I/O –
Jeśli używasz KMDF, musisz wywołać WdfDeviceInitSetIoInCallerContextCallback(). To pozwoli ci zajrzeć do żądania I/O zanim zostanie umieszczone w kolejce I/O kmdf, będziesz pracował w kontekście procesu inicjatora I/O i będziesz na rdzeniu, który zainicjował I/O O. Stamtąd możesz zadzwonić do KeGetCurrentProcessorNumberEx() i zapisać wynik. –
Wymienione jako odpowiedź David, dzięki. W powiązanej notatce, mam pewność, że EvtDeviceWdmIrpPreprocess jest również wywoływana w kontekście klienta (używam gwarantowanych kolejek postępu do przodu, więc muszę się upewnić, że ZAWSZE otrzymam wywołanie, które wygląda tak, jak robi to SetIoInCallerContextCallback) –
- 1. Identyfikacja modułu jądra, który utworzył wpis sysfs
- 2. Czy można odzyskać wyjątek EOutOfMemory?
- 3. Czy można odzyskać skasowane pliki z półki?
- 4. Czy ktoś utworzył narzędzie do testowania DataContract?
- 5. MongoDB utworzył pliki
- 6. Jak mogę utworzyć procesor adnotacji, który przetwarza zmienną lokalną?
- 7. Czy można odzyskać informacje o pliku poprzez odbicie w C#?
- 8. Używając epilogu, czy można odzyskać zasoby bez skojarzeń?
- 9. Czy procesor wieloprocesowy.Manager(). Dict(). Setdefault() jest uszkodzony?
- 10. Nie można odzyskać chińskich tekstów podczas skrobania
- 11. Powodowane przez: java.security.UnrecoverableKeyException: Nie można odzyskać klucza
- 12. Nie można odzyskać plik w Git
- 13. Jak odzyskać zatrzymany kontener dokowania, który zabrakło miejsca?
- 14. Szyny 3: Użytkownik utworzył niestandardowe formularze?
- 15. Jak mogę prześledzić zapytanie SQL wygenerowane przez EF z powrotem do kodu, który je utworzył
- 16. Procesor asynchroniczny Django
- 17. Procesor zrzutu GCC definiuje
- 18. Procesor XSLT2.0 dla Perla?
- 19. Czy ktoś utworzył profil formatera kodu Java Eclipse IDE, który jest zgodny z regułami stylu kodu systemu Android?
- 20. Android "Tylko oryginalny wątek, który utworzył hierarchię widoku, może dotykać swoich widoków." błąd w Fragmentie
- 21. Aktualizacja VCL z tego samego wątku, który utworzył interfejs użytkownika. Czemu?
- 22. Tylko oryginalny wątek, który utworzył hierarchię widoku, może dotykać swoich widoków.
- 23. Android "Tylko oryginalny wątek, który utworzył hierarchię widoku, może dotykać swoich widoków." Błąd w pętli for
- 24. Czy napisanie aplikacji HTML5 obciążającej procesor jest zasadniczo niewłaściwe?
- 25. Ustawienie Explict procesor adnotacji
- 26. Django-sass-procesor TypeError
- 27. Czy istnieje sposób sprawdzenia, ile procesora zużywa procesor na rdzeń?
- 28. Jak napisać procesor adnotacji Java?
- 29. Czy można napisać kod, który spowoduje długi czas kompilacji?
- 30. Czy można uzyskać numer wiersza, który spowodował błąd?
Pobieranie procesora po tej wysyłce jest oczywiście dość proste. Ale czy mam gwarancję, że funkcja wywołania zwrotnego działa na tym samym rdzeniu co problemy? –