Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как получить Serial Number диска в C#?  (Прочитано 20460 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
little
Помогающий

de
Offline Offline
Пол: Мужской

« : 26-03-2007 19:25 » 

Во многих программах (напр. FAR Manager) применительно к диску отображается такой параметр, как Serial Number. Как его можно получить под C#? В System.IO.DriveInfo не нашел Жаль .
Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #1 : 29-03-2007 20:46 » 

Неужто никто не сталкивался? Жаль
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 29-03-2007 21:46 » new

После небольшого поиска в MSDN Нашел это http://msdn2.microsoft.com/en-us/library/ms186146.aspx Отсюда можно копать дальше
« Последнее редактирование: 29-03-2007 21:48 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #3 : 29-03-2007 21:52 » 

Мдя... интересный способ Улыбаюсь
Спасибо за помощь, буду пробовать.

ЗЫ: и на этом они думают организовать нормальную файловую сиситему!?
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 30-03-2007 20:18 » 

Цитата
GetVolumeInformation

The GetVolumeInformation function retrieves information about a file system and volume that have a specified root directory.

To retrieve the current compression state of a file or directory, use FSCTL_GET_COMPRESSION.


BOOL GetVolumeInformation(
  LPCTSTR lpRootPathName,
  LPTSTR lpVolumeNameBuffer,
  DWORD nVolumeNameSize,
  LPDWORD lpVolumeSerialNumber,
  LPDWORD lpMaximumComponentLength,
  LPDWORD lpFileSystemFlags,
  LPTSTR lpFileSystemNameBuffer,
  DWORD nFileSystemNameSize
);

Используй PInvoke для вызова АПИ функции и не будет проблем.

Ну и если уж очнь надо Улыбаюсь, то кажется это то, что тебе надо
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 30-03-2007 20:18 » 

ССылку забыл дать Улыбаюсь http://msdn2.microsoft.com/en-us/library/aa394132.aspx
Записан

ещё один вопрос ...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 30-03-2007 20:52 » 

Тут надо различать: Серийный номер физического диска (который дает производитель) и серийный номер логического диска (устанавливается при форматировании) Та функция, которую привел  nikedeforest, Это для логического диска.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #7 : 30-03-2007 21:19 » 

А на CD/DVD болванках какой нумер? Подозреваю, что логический.
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 31-03-2007 16:54 » 

Вы по ссылке глянте, там про жесткий диск, если я не ошибаюсь, и это класс .НЕТ, а не АПИ.
Записан

ещё один вопрос ...
Neznajka
Новенький

ru
Offline Offline
Пол: Мужской
Все равно ничего не знаю!


« Ответ #9 : 06-11-2009 14:31 » 

Код:
using System;
using System.Text;
using System.Collections;
using System.Management;
using System.Text.RegularExpressions;
using System.Net;
using System.Security.Cryptography;

namespace Namespace
{
    class Class
    {
        static string HashInfoHardDisks
        {
            get
            {
                StringBuilder sb = new StringBuilder();

                try
                {
                    foreach (ManagementObject mdd in new ManagementObjectSearcher(new SelectQuery("Win32_DiskDrive")).Get())
                    {
                        if (Regex.IsMatch((string)((PropertyData)mdd.Properties["MediaType"]).Value, @"^(?i:FIXED[\s\t]+HARD\sDISK[\s\t\w]*)", RegexOptions.Compiled))
                        {
                            sb.Append(((PropertyData)mdd.Properties["Model"]).Value);
                            sb.Append(((PropertyData)mdd.Properties["Size"]).Value);

                            try
                            {
                                sb.Append(((PropertyData)mdd.Properties["SerialNumber"]).Value);
                            }
                            catch
                            {
                                foreach (ManagementObject mpm in new ManagementObjectSearcher(new SelectQuery("Win32_PhysicalMedia")).Get())
                                {
                                    if ((string)((PropertyData)mdd.Properties["DeviceID"]).Value == (string)((PropertyData)mpm.Properties["Tag"]).Value)
                                    {
                                        sb.Append(((PropertyData)mpm.Properties["SerialNumber"]).Value);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
                catch
                {
                    sb.Append(Dns.GetHostName());
                }

                StringBuilder sr = new StringBuilder();
                foreach (byte b in MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(sb.ToString()))) sr.Append(b.ToString("x2"));
                
                return sr.ToString();
            }
        }
    }
}
« Последнее редактирование: 06-11-2009 17:09 от Finch » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines