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

نام تاپیک: خواندن و نوشتن سکتورها در میکرو SD متصل با RAM Reader

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1392
    پست
    41

    خواندن و نوشتن سکتورها در میکرو SD متصل با RAM Reader

    با سلام. من میخوام تو یک میکرو SD که با رم ریدر به کامپیوتر وصل هست سکتوری بخونم و بنویسم. ویندوزم هم سون هست.
    تو چند تا سایت خارجی یکسری کد بود که موقع اجرا خطا میده . درست موقعی که میخواد با CreateFile کار کنه میگه handel مورد داره. چندین نوع مختلف رو چک کردم ولی هیچکدم جواب نداد. این کار رو قبلا تو ویندوز XP چندین سال پیش انجام داده بودم ولی با همون توابع اینجا جواب نمیده.

  2. #2
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1392
    پست
    41

    نقل قول: خواندن و نوشتن سکتورها در میکرو SD متصل با RAM Reader

    اینا توابعی هست که جواب نداد. البته چندین نوع دیگه هم بود که بی نتیجه بودن.


    using System;
    using System.Linq;
    using System.Collections.Generic;
    using System.IO;
    using System.Runtime.InteropServices;
    using Microsoft.Win32.SafeHandles;
    using System.Security;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
    namespace Program_uSD
    {
    class uSDFunctions
    {
    private const uint GENERIC_READ = 0x80000000;
    private const uint GENERIC_WRITE = 0x40000000;

    private const uint FILE_SHARE_READ = 0x00000001;
    private const uint FILE_SHARE_WRITE = 0x00000002;

    private const uint OPEN_EXISTING = 3;

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern SafeFileHandle CreateFileA(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);


    private System.IO.FileStream _DriverStream;
    private long _SectorLength = 0;
    private SafeFileHandle _DriverHandle;

    /// <summary>
    /// The number of sectors
    /// </summary>
    public long SectorLength { get { return _SectorLength; } }


    /// <summary>
    /// Access to the disk sector information
    /// </summary>
    /// <param name="DriverName">G:</param>
    public bool uSD_Init(string DriverName)
    {

    if (DriverName == null && DriverName.Trim().Length == 0) return false;
    _DriverHandle = CreateFileA("\\\\.\\" + DriverName.Trim(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);

    _DriverStream = new System.IO.FileStream(_DriverHandle, System.IO.FileAccess.ReadWrite);

    GetSectorCount();
    return true;
    }
    /// <summary>
    /// Gets the number of sectors
    /// </summary>
    private void GetSectorCount()
    {
    if (_DriverStream == null) return;
    _DriverStream.Position = 0;

    byte[] ReturnByte = new byte[512];
    _DriverStream.Read(ReturnByte, 0, 512); //Gets the first sector

    if (ReturnByte[0] == 0xEB && ReturnByte[1] == 0x58) //DOS seemed to be 32
    {
    _SectorLength = (long)BitConverter.ToInt32(new byte[] { ReturnByte[32], ReturnByte[33], ReturnByte[34], ReturnByte[35] }, 0);
    }
    if (ReturnByte[0] == 0xEB && ReturnByte[1] == 0x52) //NTFS seems to be 64
    {
    _SectorLength = BitConverter.ToInt64(new byte[] { ReturnByte[40], ReturnByte[41], ReturnByte[42], ReturnByte[43], ReturnByte[44], ReturnByte[45], ReturnByte[46], ReturnByte[47] }, 0);
    }

    }
    public byte[] uSD_ReadSector(long sectornumber)
    {
    byte[] SecBuffer = new byte[520];
    _DriverStream.Seek(sectornumber * 512, SeekOrigin.Begin);
    _DriverStream.Read(SecBuffer, 0, 512);
    return SecBuffer;
    }
    public bool uSD_WriteSector(long sectornumber,byte[] buffer)
    {
    try
    {
    byte[] rdbuf = new byte[1000];
    int i;
    _DriverStream.Seek(sectornumber * 512, SeekOrigin.Begin);
    _DriverStream.Write(buffer, 0, 512);
    _DriverStream.Seek(sectornumber * 512, SeekOrigin.Begin);
    _DriverStream.Read(rdbuf, 0, 512);
    for (i = 0; i < 512; i++)
    if (buffer[i] != rdbuf[i])
    {
    string ge = "Error in sector :" + sectornumber.ToString();
    MessageBox.Show(ge);
    return false;
    }
    return true;
    }
    catch
    {
    return false;
    }
    }
    }
    }



  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1392
    پست
    41

    نقل قول: خواندن و نوشتن سکتورها در میکرو SD متصل با RAM Reader

    آقا راه حل رو پیدا کردم. این dll رو که نامش RAW.dll هست دانلود کنید و Add Reference کنید.
    http://www.dreamincode.net/forums/in...tach_id=33751&

    نمونه کد هم اینجوریه :

    RAW.DISK.streamer mystream;
    mystream = RAW.DISK.CreateStream("H:",System.IO.FileAccess.Re adWrite);
    if (mystream.isERROR == true)
    {
    MessageBox.Show("Error!");
    Application.Exit();
    }
    int i;
    byte[] ff = new byte[1000];
    ff = RAW.DISK.ReadSector(0,512, mystream);

تاپیک های مشابه

  1. پاسخ: 3
    آخرین پست: دوشنبه 04 خرداد 1394, 02:29 صبح
  2. خواندن و نوشتن به صورت چندتایی از میکرو
    نوشته شده توسط s.hematii در بخش برنامه نویسی در 6 VB
    پاسخ: 8
    آخرین پست: دوشنبه 26 تیر 1391, 21:08 عصر
  3. خواندن و نوشتن در رجیستری (Registry) ویندوز، چگونه؟
    نوشته شده توسط ramin_rp در بخش برنامه نویسی در Delphi
    پاسخ: 6
    آخرین پست: یک شنبه 24 اسفند 1382, 11:30 صبح
  4. خواندن و نوشتن یک کووکی با مسیر
    نوشته شده توسط FirstLine در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: یک شنبه 02 آذر 1382, 20:08 عصر
  5. کد خواندن و نوشتن در یک فایل
    نوشته شده توسط mostafa612003 در بخش PHP
    پاسخ: 2
    آخرین پست: سه شنبه 08 مهر 1382, 15:45 عصر

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

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