2012-01-05 26 views
6

Z RawDisk website:Czy mogę uzyskać dostęp do zapisu sektorów dysku surowego w systemach Vista i Windows 7 w trybie użytkownika?

Nowy model zabezpieczeń systemu Windows Vista stawia ciasne ograniczenia dotyczące aplikacji wykonanych w trybie użytkownika. Nawet z podwyższonymi uprawnieniami administracyjnymi aplikacja nie może uzyskać praw zapisu do sektorów surowego dysku.

Czy to prawda?

From the Microsoft doc:

Zmiany do systemu plików i do stosu przechowywania nie stosuje czy wolumin nie jest zamontowany lub czy głośność nie ma systemu plików.

Podaj

  • albo link do oficjalnego dokumentu potwierdzającego Microsoft internetowej RawDisk
  • lub przykład kodu roboczego. (I oczywiście nie udało się stworzyć jedną, CreateFile() połączenia nie powiedzie się z ERROR_ACCESS_DENIED jeśli GENERIC_WRITE jest ustawiony.)

innych odpowiednich dokumenty Microsoft, że do tej pory znaleziono:

+0

Co stanie się, gdy spróbujesz (oczywiście z ofiarną objętością)? – Richard

+0

@Richard Otrzymuję 'ERROR_ACCESS_DENIED' (0x5). Testuję na surowej karcie SD. – Ali

+0

Oto twoja odpowiedź. – Richard

Odpowiedz

1

Tak. Pierwszy artykuł, który odwołuje się do zapewnia dłuższą listę wyjątków:

  • jeśli system plików nie jest zamontowany
  • jeśli system plików został zablokowany.
  • jeśli sektory są zapisywane do przebywania przestrzeń systemu plików na zewnątrz (dotyczy to sektorów startowych, a „żaden system plików” przypadek gdzie oczywiście wszystkie sektory są poza systemem plików)
  • jeżeli żądanie zapisu została oznaczona przez sterownik trybu jądra.

Oczywiście ostatni wyjątek nie ma dla ciebie znaczenia. Tryb użytkownika jest przeciwieństwem trybu jądra. Pozostałe wyjątki nadal obowiązują.

+0

'CreateFile()' nie działa dla 'GENERIC_WRITE'. ** Nie ** masz uchwyt do wywołania' DeviceIoControl() 'i wydania 'FSCTL_ALLOW_EXTENDED_DASD_IO' .Jeśli inne wyjątki nadal mają zastosowanie, jak powinienem wywołać' CreateFile() ', aby nie uzyskać' ERROR_ACCESS_DENIED'? Proces jest poprawnie podniesiony.Dodaj działający przykład kodu. – Ali

+0

Cóż, to niezwiązane i tak nie masz numeru sektora, więc ograniczenia oparte na sektorach nie mają jeszcze znaczenia. "Ty" zdefiniowałeś "OPEN_EXISTING" i "FILE_SHARE_WRITE", a ty otwierasz wolumin (' \\. \ X: '), a nie jego f ile system ('\\. \ X: \')? – MSalters

+0

Tak, robię dokładnie to. Nie mam pojęcia, jakie są atrybuty bezpieczeństwa, po prostu przekazuję NULL. – Ali