Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Harddisk e ait unique bir numarayi C ile bulmak?

Konu, 'C / C++' kısmında Huzeyfe tarafından paylaşıldı.

  1. Huzeyfe

    Huzeyfe Üye

    Kayıt:
    18 Ekim 2002
    Mesajlar:
    95
    Beğenilen Mesajlar:
    0
    Meslek:
    SEcurity Administrator
    Şehir:
    Kocaeli
    Bilgisayarda bulunan harddisk e ait oyle bir iz alacagimki bu iz baska bir harddiske uymayacak,yani bir program yazildiginda bu program bilgisayardaki hd numarasi(varsa?)alacak kayit edecek ve baska bilgisayar gidince ayni numara degilse calismayacak,harddiske ait boyle bir numara varmıdır?varsa cile nasil kontrol ettirebilecegime dair kaynak bilen?
     
  2. ee++

    ee++ Daimi Üye

    Kayıt:
    25 Temmuz 2002
    Mesajlar:
    1,122
    Beğenilen Mesajlar:
    0
    Şehir:
    Ankara
    Selamlar,

    Bunu yapabilmek icin Standart C'den biraz fazlasi gerekiyor. Genelde Windows platformunda orneklenen bir kac yontem var:

    1. C + Assembly
    2. absread() (dos.h)
    3. intdos() (dos.h)
    4. GetVolumeInformation() (WinAPI)

    Son yontemi ornekleyelim:

    Kod:
    #include <stdio.h>
    #include <windows.h>
    
    char VolumeNameBuffer[256];
    unsigned long VolumeSerialNumber;
    long MaximumComponentLength;        
    long FileSystemFlags;
    char FileSystemNameBuffer[256];
    
    int main()
    {
       GetVolumeInformation(
         "C:\\",
         VolumeNameBuffer,
         sizeof(VolumeNameBuffer),
         &VolumeSerialNumber,
         &MaximumComponentLength,
         &FileSystemFlags,
         FileSystemNameBuffer,
         sizeof(FileSystemNameBuffer)
       );
    
       printf("%u", VolumeSerialNumber);
       getchar();
       return 0;
    }
    Bu kod tam olarak Win32 kurallarina uygun degil ama elimde olmayan tiksinti sebepleri ile boyle yazdim. Is goruyor sanirim. Tabi burada program "C:\" ile calisiyor. Bu parametrik bir hale getirilebilir.

    GetVolumeInformation islevinin de yapisini vereyim, MSDN'den de bulunabilir:

    Kod:
    BOOL GetVolumeInformation(
      LPCTSTR lpRootPathName,           // root directory
      LPTSTR lpVolumeNameBuffer,        // volume name buffer
      DWORD nVolumeNameSize,            // length of name buffer
      LPDWORD lpVolumeSerialNumber,     // volume serial number
      LPDWORD lpMaximumComponentLength, // maximum file name length
      LPDWORD lpFileSystemFlags,        // file system options
      LPTSTR lpFileSystemNameBuffer,    // file system name buffer
      DWORD nFileSystemNameSize         // length of file system name buffer
    );
    Diger yontemler icin su baglantilar incelenebilir:

    http://www.codeguru.com/system/HardwareInfo.shtml
    http://cszero.sc.maricopa.edu/forums/cis162/messages/32.html
    http://cszero.sc.maricopa.edu/forums/cis162/messages/112.html

    Kolay gelsin.

    (Yeterli mi Huzeyfe?)
     
    Son düzenleme yönetici tarafından yapıldı: 20 Ekim 2002
  3. Huzeyfe

    Huzeyfe Üye

    Kayıt:
    18 Ekim 2002
    Mesajlar:
    95
    Beğenilen Mesajlar:
    0
    Meslek:
    SEcurity Administrator
    Şehir:
    Kocaeli
    Tesekkurler,detaylar icin linkleri inceliyorum