نمایش نتایج 1 تا 8 از 8

نام تاپیک: اجرای وقفه های سخت افزاری در دلفی

  1. #1
    کاربر دائمی
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    اهواز
    پست
    158

    اجرای وقفه های سخت افزاری در دلفی

    سلام دوستان من می خوام وقفه های سخت افزاری مثل وقفه ی 13 از وقفه های بایوس که برای خواند و نوشتن رو دیسک سخت کار برد داره رو تو دلفی اجرا کنم ولی ارور میده کدم اینه
    mov ah,02
    mov al,01
    mov ch,00
    mov cl,01
    mov dh,00
    mov dl,00
    mov bx,[x]
    int 13h

    لطفا برای دسترسی مستقیم به سخت افزار راهنماییم کنید این ویندوز گیر بدی داده

  2. #2

    نقل قول: اجرای وقفه های سخت افزاری در دلفی

    لطفا برای دسترسی مستقیم به سخت افزار راهنماییم کنید این ویندوز گیر بدی داده
    در ویندوزهای برپایه NT، شما در سطح User Mode دسترسی مستقیم به سخت افزار ندارید، و همه کارها باید از طریق APIهای ویندوز انجام بشه. کد شما هم به همین دلیل کار نمیکنه.

    برای دسترسی مستقیم به سخت افزار باید برای کرنل ویندوز درایور بنویسید. دلفی برای این کار طراحی نشده، و بطور عادی هم قابلیت کامپایل کد برای کرنل ویندوز را نداره. اگر واقعا قصد نوشتن درایور سطح کرنل را دارید، از یکی از کامپایلرهای C یا ++C استفاده کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    اهواز
    پست
    158

    Thumbs up نقل قول: اجرای وقفه های سخت افزاری در دلفی

    درسته حق با شماست .
    حالا راه ساده تری هست که من بتونم با دلفی رو سکتور 0 یه فلاپی چیزی بنویسم البته قالب چیزی که می نویسم هم نمی خوام توست ویندوز از قبل تعیین شده باشه.

  4. #4

    نقل قول: اجرای وقفه های سخت افزاری در دلفی

    دوست عزیز آقای کشاورز که فرمودند با دلفی هیچ کاری با سخت افزار نمی تونی انجام بدی چون تو سطح یوزره. باید با c کار کنی.


  5. #5
    کاربر دائمی آواتار joker
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان
    سن
    42
    پست
    1,326

    نقل قول: اجرای وقفه های سخت افزاری در دلفی

    نقل قول نوشته شده توسط MohsenTi مشاهده تاپیک
    درسته حق با شماست .
    حالا راه ساده تری هست که من بتونم با دلفی رو سکتور 0 یه فلاپی چیزی بنویسم البته قالب چیزی که می نویسم هم نمی خوام توست ویندوز از قبل تعیین شده باشه.
    توی دلفی هر کاری دلت بخواد میتونی بکنی

    این یک مثال برای تغییر سریال نامبره درایوه مثلا ، من دیگه درستش نمیکنم ، خودت سورس را تغییر بده و هربایتی میخوای جایگزین کن ( فقط بپا به جای فلاپی ، بوت لودر ویندوزت را نپرونی :))
    http://forum.clubedelphi.net/viewtop...500aa957ec2d81



    type
    TSector = array[0..511] of Byte;

    procedure ChangeVolumeSerialNumber(Drive: Char;
    SerialNumber: LongWord);
    var
    Boot: TSector;
    begin
    ReadBootNT(Drive, Boot);
    Move(SerialNumber, Boot[39], SizeOf(SerialNumber));
    WriteBootNT(Drive, Boot) end;

    A complication occurs, however, because reading and writing the boot sector in NT requires completely different code from that used in reading and writing the boot sector in Win95/98.

    So here's the complete code, taking into account the differences between NT and Win95/98:


    type
    TSector = array[0..511] of Byte;

    procedure ReadBootNT(Drive: Char; var Boot: TSector);
    var
    BytesRead: Cardinal;
    H: THandle;
    begin
    H := CreateFile(PChar(Format('\\.\%s:', [UpCase(Drive)])),
    GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if H = INVALID_HANDLE_VALUE then
    raise Exception.Create(SysErrorMessage(GetLastError));
    try
    if not ReadFile(H, Boot, SizeOf(Boot), BytesRead, nil)then
    raise Exception.Create(SysErrorMessage(GetLastError));
    finally
    CloseHandle(H) end end;

    procedure WriteBootNT(Drive: Char; var Boot: TSector);
    var
    BytesWritten: Cardinal;
    H: THandle;
    begin
    H := CreateFile(PChar(Format('\\.\%s:', [UpCase(Drive)])),
    GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if H = INVALID_HANDLE_VALUE then
    raise Exception.Create(SysErrorMessage(GetLastError));
    try
    if not WriteFile(H, Boot, SizeOf(Boot), BytesWritten, nil)then
    raise Exception.Create(SysErrorMessage(GetLastError));
    finally
    CloseHandle(H) end end;

    type
    TDiocRegisters = record
    EBX, EDX, ECX, EAX, EDI, ESI, Flags: LongWord end;

    TVWin32CtlCode = (ccNone, ccVWin32IntIoctl, ccVWin32Int25,
    ccVWin32Int26, ccVWin32Int13);

    function VWin32(CtlCode: TVWin32CtlCode;
    var Regs: TDiocRegisters): Boolean;
    var
    Device: THandle;
    Count: LongWord;
    begin
    Device := CreateFile('\\.\VWIN32', 0, 0, nil, 0,
    FILE_FLAG_DELETE_ON_CLOSE, 0);
    if Device = INVALID_HANDLE_VALUE then
    raise Exception.Create(SysErrorMessage(GetLastError));
    try
    Result := DeviceIoControl(Device, Ord(CtlCode), @Regs,
    SizeOf(Regs), @Regs, SizeOf(Regs), Count, nil);
    finally
    CloseHandle(Device) end end;

    procedure ReadBoot95(Drive: Char; var Boot: TSector);
    var
    Regs: TDiocRegisters;
    begin
    with Regs do begin
    EAX := Ord(UpCase(Drive)) - Ord('A');
    EBX := LongWord(@Boot);
    ECX := 1;
    EDX := 0 end;
    if not VWin32(ccVWin32Int25, Regs) then
    raise Exception.Create(SysErrorMessage(GetLastError)) end;

    procedure WriteBoot95(Drive: Char; var Boot: TSector);
    var
    Regs: TDiocRegisters;
    begin
    with Regs do begin
    EAX := Ord(UpCase(Drive)) - Ord('A');
    EBX := LongWord(@Boot);
    ECX := 1;
    EDX := 0 end;
    if not VWin32(ccVWin32Int26, Regs) then
    raise Exception.Create(SysErrorMessage(GetLastError)) end;

    procedure ChangeVolumeSerialNumber(Drive: Char;
    SerialNumber: LongWord);
    var
    Boot: TSector;
    begin
    case Win32Platform of
    VER_PLATFORM_WIN32_WINDOWS:
    ReadBoot95(Drive, Boot);
    VER_PLATFORM_WIN32_NT:
    ReadBootNT(Drive, Boot) end;
    Move(SerialNumber, Boot[39], SizeOf(SerialNumber));
    case Win32Platform of
    VER_PLATFORM_WIN32_WINDOWS:
    WriteBoot95(Drive, Boot);
    VER_PLATFORM_WIN32_NT:
    WriteBootNT(Drive, Boot) end end;
    آخرین ویرایش به وسیله joker : شنبه 19 اردیبهشت 1388 در 03:28 صبح

  6. #6

    نقل قول: اجرای وقفه های سخت افزاری در دلفی

    آقای کشاورز که فرمودند با دلفی هیچ کاری با سخت افزار نمی تونی انجام بدی چون تو سطح یوزره. باید با c کار کنی.
    نگفتم کاری نمی تونید بکنید! گفتم هر کاری بخواید بکنید، باید از طریق توابع ویندوز باشه، و مستقیما دسترسی ندارید.
    کدی هم که Joker گذاشته، از توابع موجود در User Mode ویندوز استفاده کرده.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #7

    نقل قول: اجرای وقفه های سخت افزاری در دلفی

    man hamino vase C++‎ mikham lotfan rahnamai konid

  8. #8

    نقل قول: اجرای وقفه های سخت افزاری در دلفی

    اشتباه اومدی..
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •