Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Dostęp do dyskietki
Jeż



Typ: neutral
Postów: 55
Zarejestrowany: Mar 2004
Dostęp do dyskietki

Mam dyskietki sformatowane w systemie DOS. Są na nich nagrane programy do wykonywania na maszynie.
Problem jest taki, że ani DOS ani Windows nie potrafią ich przeczytać, bowiem programy są na nich nagrane bez ścieżki zerowej, prawdopodobnie bajt po bajcie bezpośrednio na nośnik.

Pytanie brzmi- czy są w VB jakieś możliwości bezpośredniego czytania bajtów z dyskietki?
Coś podobnego realizował Norton Dysk Edytor - stary dos-owski program.
Mnie jednak chodzi nie tylko o przeczytanie tych dyskietek ale też o zapisywanie ich potem w tym formacie.

15-12-2004 21:55
Pokaż profil Jeż  Wyślij email do Jeż   
Usercontrol
mr. Tom



Typ: neutral
Postów: 191
Zarejestrowany: Oct 2003

Spróbuj pobawić się Hex Workshopem, ale to może być czasochłonne.

19-12-2004 19:50
Pokaż profil Usercontrol  Wyślij email do Usercontrol   Odwiedź stronę Usercontrol       1518548
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Sądzę, że Jeżowi chodziło o odczytanie zawartości dyskietki spod VB . Wspomniał o DiskEditorze (btw: nie wiem jak w najnowszej wersji, ale nadal był on obecny w Norton SystemWorks 2oo1!), więc nie chodziło mu o sam program do edycji danych na dysku.

Co do samego pytania Jeża - ja niestety nie wiem. Prawdopodobnie da się to zrobic przez wysyłanie komend bezpośrednio do sterownika (to pod VB da się wykonać i to w miarę prosto, z użyciem WinAPI) - ale to tylko mała wskazówka.. może w czymś pomoże


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

20-12-2004 03:54
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Jeż



Typ: neutral
Postów: 55
Zarejestrowany: Mar 2004

Dzięki za posty. Faktycznie z podejrzeniem tego co jest na dyskietce w zasadzie nie ma problemu. Problemem dla mnie jest zrobienie tego pod VB.
  Wszystkie znane mi instrukcje i komendy VB  oraz API - dotyczą plików, ścieżek - czyli to samo co wykorzystuje Explorer windows. Instrukcje OPEN oraz Get otwierają pliki o znanej ścieżce dostępu.

Kiedyś tutaj na forum był poruszany temat zabezpieczenia programów, gdzie dyskutanci proponowali by robić to z dyskietką poprzez nadawanie i pobieranie z niej ukrytego identyfikatora. Operacje te robili chyba bezpośrednio na dyskietce. Ale obecnie nie mogę znaleźć tych postów by prześledzić dyskusję i sprawdzić czy coś z tego by się nadawało.

20-12-2004 21:57
Pokaż profil Jeż  Wyślij email do Jeż   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Może to ci w czymś pomoże:
http://groups.google.pl/groups?selm=eK8vMmW3CHA.2156%40TK2MSFTNGP10.phx.gbl&output=gplain


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

23-12-2004 03:34
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Jeż



Typ: neutral
Postów: 55
Zarejestrowany: Mar 2004

Zajrzałem do tego co mi poleciłeś. Coś być może w tym jest - tak przynajmniej wynika z opisu i nazw zmiennych wejściowych. Brak było deklaracji kilku funkcji API ale je sobie dopisałem.
Gorzej, że powinny być dwie procedurki o nazwach ByteLo oraz ByteHi a tych już nie potrafię dopisać.
Wygląda więc na to, że czas się poddać.

25-12-2004 19:35
Pokaż profil Jeż  Wyślij email do Jeż   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

ByteLo i ByteHi pobierają dolny i górny bajt słowa.
Nie wiem, jakich oni tam używali, ale jeśli chodzi o ByteLo, to można ją zapisać tak:

Function ByteLo(nWORD As Integer) As Byte
    ByteLo = nWORD And &hFF
End Function


ByteHi tak:

Public Function ByteHi(nWORD As Integer) As Byte
    Dim nHW As Integer
    If nWORD And &H8000 Then nHW = &H4000
   
    ByteHi = (nWORD And &H7FFE) \ 256
    ByteHi = (ByteHi Or (nHW \ 128))
End Function



_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

25-12-2004 19:55
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Jeż



Typ: neutral
Postów: 55
Zarejestrowany: Mar 2004

Pomarudzę.
Dołączyłem Twoje procedurki... i okazało się, że  są potrzebne następne: WordLo i WordHi. Poza tym jest potrzebna zmienna lub stała SECTORSIZE (oprócz zmiennej wejściowej Sectors).
Domyślam się, że zmienne WordLo i WordHi to  16bit składowe liczby 32bitowej w jakich są zapisywane obecnie HardDyski.
Wyszło też parę innych błędów.
Działając po omacku doprowadziłem do tego, że programik zadziałał ale czyta same zera.
Inna sprawa, że tak na dobrą sprawę nie bardzo pojmuję która z użytych w tym programie funkcji ma czytać/zapisywać dane z dysku.

26-12-2004 21:38
Pokaż profil Jeż  Wyślij email do Jeż   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

LoWord i HiWord wg. http://support.microsoft.com/kb/q189170/

  Function LoWord(DWord As Long) As Integer
      If DWord And &H8000& Then ' &H8000& = &H00008000
        LoWord = DWord Or &HFFFF0000
      Else
        LoWord = DWord And &HFFFF&
      End If
  End Function

  Function HiWord(DWord As Long) As Integer
      HiWord = (DWord And &HFFFF0000)  &H10000
  End Function


SECTORSIZE - tutaj może być mały problem, ale podejrzewam, że chodzi o rozmiar sektora dyskietki. Czyli trzeba go będzie pobrać (nie ryzykowałbym zgadywania, gdy chodzi o podanie rozmiaru co do bajtu)...

Zmienna Sectors - prawdopodobnie okresla ile sektorów ma zostać pobrane.

A odczytuje funkcja DeviceIOControl.

No i należy też zauważyć,że to jest funkcja pod Win9x...

[Post edytowany dnia 27-12-2004 03:13 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

27-12-2004 03:12
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Jeż



Typ: neutral
Postów: 55
Zarejestrowany: Mar 2004

Dzięki za funkcje do obliczania LoWord i HiWord.
Wprawdzie znalazłem już inny sposób ale ten jest prostszy.
Natomiast problem może tkwić bardziej w systemie. Od niedawna pracuję w WindowsXP, wszystkie moje stare programy działają w nim bez zarzutu - więc prawdę powiedziawszy zlekceważyłem komentarz, że  dotyczy to 'Win9x/Me. Spróbuję programik uruchomić na innym kompie. Dam znać co wyjdzie.

27-12-2004 19:50
Pokaż profil Jeż  Wyślij email do Jeż   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

A jaki to sposób?

A co do zależności od systemu - chociaż wiele funkcji WinAPI działa na obu rodzinach systemów, część z nich tak się nie zachowuje. Dlatego właśnie w przypadku tej grupy funkcji warto zwracać uwagę na informację o systemie - ja sam przez nieuwagę się już kilka razy "przejechałem" i kończąc program orientowałem się, że nie będzie mi działał na którymś z systemów . A funkcja DeviceIOControl należy akurat do funkcji, które chociaż same w sobie działają na obu systemach - mogą natrafić na problemy zwiazane z różną architekturą obydwu środowisk. Podany przykład korzystał właściwie z funkcji DOS'a, a zatem nie występującej w WinNT - i dlatego nie działał pod tym systemem . To tyle i życzę powodzenia.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

27-12-2004 20:38
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 10 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1