Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Bezpieczne przetwarzanie IRP zawierających kody kontroli we/wy zależy od prawidłowego zdefiniowania kodów IOCTL i dokładnego zbadania parametrów odbieranych przez sterownik przy użyciu IRP.
Podczas definiowania nowych kodów IOCTL należy użyć następujących reguł:
Zawsze określ wartość FunctionCode , która jest równa lub większa niż 0x800.
Zawsze określ wartość RequiredAccess . Menedżer I/O nie wysyła żądań IOCTL, jeśli wywołujący ma niewystarczające prawa dostępu.
Nie należy definiować kodów IOCTL, które umożliwiają obiektom wywołującym odczytywanie lub zapisywanie nieokreślonych obszarów pamięci jądra.
Podczas przetwarzania kodów IOCTL w sterowniku należy użyć następujących reguł:
Za każdym razem, gdy rutyny wysyłania sterownika testują otrzymane kody IOCTL, muszą zawsze przetestować całą wartość 32-bitową.
Sterowniki mogą używać funkcji IoValidateDeviceIoControlAccess do dynamicznego przeprowadzania bardziej rygorystycznej weryfikacji dostępu niż określonej przez wartość RequiredAccess w definicji kodu sterowania we/wy.
Nigdy nie odczytaj ani nie zapisuj większej ilości danych niż bufor wskazywany przez protokół Irp-AssociatedIrp.SystemBuffer> może zawierać. W związku z tym zawsze sprawdź parametry.DeviceIoControl.InputBufferLength lub Parameters.DeviceIoControl.OutputBufferLength w strukturze IO_STACK_LOCATION , aby określić limity buforu.
Zawsze zero przydzielonych sterowników, które będą zawierać dane przeznaczone dla aplikacji, która pochodzi z żądania IOCTL. W ten sposób nie będziesz przypadkowo kopiować poufnych danych do aplikacji.
W przypadku METHOD_IN_DIRECT i transferów METHOD_OUT_DIRECT postępuj zgodnie z powyższymi regułami. Ponadto sprawdź wartość zwracaną null z mmGetSystemAddressForMdlSafe, która wskazuje, że mapowanie nie powiodło się lub że podano bufor o zerowej długości.
W przypadku METHOD_NEITHER transferów postępuj zgodnie z regułami podanymi w temacie Używanie operacji we/wy, które nie są buforowane ani bezpośrednie.