Announcement

Collapse
No announcement yet.

Parameter von DIOC()...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Parameter von DIOC()...

    Hallo,

    wie übergebe ich einen String an einen VxD-Treiber mit
    DeviceIOControl?
    Die Parameter sehen wie folgt aus:

    <pre>
    DeviceIoControl(
    hDevice: Cardinal, // VxD-Handle
    dwIoControlCode: Cardinal, // gibt die auszuführende Operation an
    lpInBuffer: Pointer, // für die zu übergebenden Daten ???
    nInBufferSize:Cardinal, // Größe für "oben"
    lpOutBuffer:Pointer, // Puffer für die empfangenen Daten ???
    nOutBufferSize: Cardinal, // Größe ...
    lpBytesReturned:Cardinal, // ???
    lpOverlapped: POOverlapped // ???
    );
    </pre>

    Nun versuche ich den Aufruf so zu gestalten:
    <pre>
    var
    hVxD : THandle;
    Puffer : PChar;
    begin
    hVxD:= CreateFile (...);
    Puffer:= 'Hallo World';
    DIOC (hVxD,1,
    Puffer,
    SizeOf (Puffer),
    nil,
    0,
    Returned,
    0);
    end;
    </pre>

    Was mache ich falsch?

    Tschüss Tim

  • #2
    Hi

    Die Eingabe- und Ausgabebuffer und deren Format ist direkt abhängig vom verwendeten VXD Treiber. D.h. jeder VXD Treiber kann ein eigenständiges Format (Struktur) dieser Buffer verwenden. Wie ich es Dir schon mal erklärte brauchst Du unbedingt die Datenblätter des jeweiligen VXD's um die Funktionen dessen nutzen zu können.

    Gruß Hage

    Comment


    • #3
      abgesehen davon ergibt SizeOf(Puffer) immer 4. Die Laenge eines Zeigers

      Comment


      • #4
        Hallo,

        @Robert:

        sicherlich, es sollte eigentlich auch bloß ein Beispiel sein, wie ich in etwa vorgehen wollte.

        @Hagen:

        So ganz habe ich das <i>System</i> immer noch nicht verstanden, hier wäre der entsprechende Source-Ausschnitt des VxD-Treibers:
        <pre>
        VxD_PAGEABLE_CODE_SEG
        BeginProc OnDeviceIoControl
        assume esitr DIOCParams
        .if [esi].dwIoControlCode==DIOC_Open
        xor eax,eax
        .elseif [esi].dwIoControlCode==1
        mov edi,[esi].lpvInBuffer
        ;-----------------------------------
        ; copy the message title to buffer
        ;-----------------------------------
        VMMCall _lstrlen, <[edi]>
        inc eax
        push eax
        VMMCall _HeapAllocate,<eax,HEAPZEROINIT>
        mov pTitle,eax
        pop eax
        VMMCall _lstrcpyn,<pTitle,[edi],eax>
        ;-----------------------------------
        ; copy the message text to buffer
        ;-----------------------------------
        VMMCall _lstrlen, <[edi+4]>
        inc eax
        push eax
        VMMCall _HeapAllocate,<eax,HEAPZEROINIT>
        mov pMessage,eax
        pop eax
        VMMCall _lstrcpyn,<pMessage,[edi+4],eax>
        mov edi,pTitle
        mov ecx,pMessage
        mov eax,MB_OK
        VMMCall Get_Sys_VM_Handle
        VxDCall SHELL_sysmodal_Message
        VMMCall _HeapFree,pTitle,0
        VMMCall _HeapFree,pMessage,0
        xor eax,eax
        .endif
        ret
        EndProc OnDeviceIoControl
        VxD_PAGEABLE_CODE_ENDS
        </pre>

        Tschüss..

        Comment


        • #5
          Hi

          Der InBuffer sollte folgende Struktur aufweisen:

          <pre>

          type
          TXYZBuffer = packed record
          Title: PChar;
          Message: PChar;
          end;

          </pre>

          Aber, wie ich schon sagte <b> besorg Dir die Docu's zum VXD</b>
          Obiger Record ist das was ich aus dem ASM Part erkennen konnte, das heist noch NICHT das es richtig ist oder ALLE notwendigen Felder vorhanden wären. Normalerweise vergleicht der VXD intern ob die InBufferSize = SizeOf(TNeededVXDStructure) ist.

          Gruß Hage

          Comment


          • #6
            Hallo,

            ja, die Methode mit dem Record habe ich jetzt auch gerade entdeckt. Da es meines Wissens nach keine Programme gibt, die den DIOC-Aufruf meines Programmes mit Parametern erkennen können, dachte ich an eine Dummy-VxD.

            Das heißt, eine VxD, die die Parameter anzeigt. Das Problem ist, dass ich ein Programm habe, dass eine VxD benutzt, ich aber nicht weiß, mit welchem Parametern diese gestartet wird.

            Nun müsste ich versuchen über
            <pre>
            BeginProc OnDeviceIoControl
            assume esitr DIOCParams
            "ShowMessage" ([esi].pInBuffer)
            "ShowMessage" ([esi].dwIoControlCode)
            "ShowMessage" ([esi].nInBufferSize)
            "ShowMessage" ([esi].lpOutBuffer)
            "ShowMessage" ([esi].nOutBufferSize)
            "ShowMessage" ([esi].lpBytesReturned)
            "ShowMessage" ([esi].pOverlapped)
            ...
            </pre>

            mir die Parameter anzeigen zu lassen.

            Wie könnte man dies (statt ShowMessage) realisieren?

            Tschüss..

            Comment


            • #7
              Au Mann, Du bist mir ein Hacker

              Der einfachste mir bekannte Weg wäre den Einsprungspunkt in die API Funktion DeviceIOControl() zu hooken. Das zeigt auch das Deine Behauptung "Da es meines Wissens nach keine Programme gibt, die den DIOC-Aufruf meines Programmes mit Parametern erkennen können, dachte ich an eine Dummy-VxD" falsch sein muss und somit DeviceIOControl() sehr wohl ausspioniert werden kann.

              Zum Hooken solcher API Funktionen gibt es meherer Wege
              <li>über die Importtabelle der Zielanwendung
              <li>Direkthooks, somit globale Hooks, in das Kernel

              Für beide Methoden gibts sogar Shareware Delphi Komponeten. Such mal nach MADSHI und MADKernel, MADCodeHook osä.

              Gruß Hagen

              PS: habs schon selber gefunden unter http://www.madshi.net

              Comment


              • #8
                Hallo,

                ich muss zugeben, dass die Formulierung vielleicht ein bisschen daneben war, aber mir ist in diesem Moment nichts besseres eingefallen, weil Programme wie "ApiSpy" oder "TopToBottom" nicht gerade hilfreich waren.

                Eigentlich wäre alles viel leichter, wenn man ein paar Dokumentationen über VxD's im Internet finden würde, aber scheinbar interessieren sich <i>noch</i> nicht allzu viele dafür!

                <i>"So weit so gut"...</i&gt

                Comment


                • #9
                  Hm

                  Ich glaube eher das das Wissen über VXD's, System und DIOC schon vorhanden ist. Die Experten lassen sich aber nicht in die Karten schauen, bzw. geben echt wenig Auskunft.

                  Gruß Hage

                  Comment


                  • #10
                    Ja,

                    das ist sicherlich auch wieder wahr, aber man kommt dadurch nicht sehr viel weiter, wenn <i>jeder alles verheimlicht</i>, "so fast wie bei Microsoft", kann schwer etwas "Neues" entstehen.

                    Ich meine selbst bei Linux sind gewisse Teile ebenfalls nicht veränderbar, damit die Basis bleibt (vielleicht verständlich), aber bei Windows ist dies nicht so ganz der Fall. Hier soll dem User alles so leicht wie möglich gemacht und nicht unbedingt am Kernel oder ähnlichem "rumgebastelt" werden...

                    Tschüss Ti

                    Comment


                    • #11
                      Hi,

                      Welche Teile von Linux sollen denn nicht änderbar sein ?????

                      Gruß
                      Gesin

                      Comment


                      • #12
                        Hallo Gesine,

                        darum ging es mir eigentlich nicht unbedingt, aber was ist zum Beispiel mit Kylix oder shadow (passwd) Quelltexten?

                        Gibt es für Delphi eigentlich eine Kommunikationsschnittstelle mit Samba (smb-Protokoll)?

                        Tschüss..

                        Comment


                        • #13
                          Hi Tim,

                          Ein Samba-Server stellt sich im Idealfall so dar ( simuliert SMB/CIFS ), das der darauf zugreifende Client überhaupt nicht merkt, das er es nicht mit einem NT-Server zu tun hat. Also ist gar keine weitere Schnittstelle notwendig. Da MS vieles verheimlicht gibt es natürlich den einen oder anderen Punkt ( z.B. Samba selbst als PDC, Kenwortabgleich mit fremden PDC usw. ) der leider seit Jahr und Tag Probleme bereitet und nur mit mehr oder weniger umständlichen Workarrounds zu erschlagen ist. Da man aber jedes Protokoll 'aufbohren' kann, dauert es einfach immer nur eine gewisse Zeit, bis das letzte 'Geheimnis' gelüftet ist.

                          Gruß
                          Gesin

                          Comment


                          • #14
                            Hallo Gesine,

                            ja, das stimmt natürlich - fast alles ist eine Frage der Zeit und wie man sich damit auseinandersetzt (sag niemals "nie").

                            Eigentlich geht es mir zum Thema Linux, Samba und Windows auch <i>nur</i> darum, wie das "Kenwortabgleichen" funktioniert, d.h. wie man einen Windows Logindialog, der über Samba läuft, erstellt.

                            Legt Windows dazu die Passwörter auch in einer pwl-Datei ab oder kann man den Dialog komplett mit einem Eigenen ersetzen?

                            Tschüss Ti

                            Comment


                            • #15
                              Hi Tim,

                              So ganz verstehe ich deine Frage nicht. Willst du ähnlich wie Novell deinen eigenen Logindialog schreiben ??? Was meinst du mit ...Logindialog, der über Samba läuft... ???

                              Gruß
                              Gesin

                              Comment

                              Working...
                              X