Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хочу привязаться к железу, как? 
:(
    Опции темы
mr.DUDA
Дата 10.1.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Xao, вместо char использовать wchar_t, перед строковыми константами ставить букву L. Остальные вопросы - в раздел С++.


--------------------
user posted image
PM MAIL WWW   Вверх
Xao
Дата 10.1.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 24.12.2007

Репутация: 1
Всего: 1



mr.DUDA, 
ты говорил, что решил проблему привязки

не мог бы ты скинуть ту длл плз и если можно, то пример получения серийного номера?

У меня не получается сделать dll с этих исходников :(
http://www.winsim.com/diskid32/diskid32.html

я вот тут нашел, но тут только с правами админа
http://www.sql.ru/forum/actualthread.aspx?...=346957&hl=
там код примера на ВБ

Код

Option Explicit
Private Declare Function IsWinNT Lib "DiskID.dll" () As Long
Private Declare Function ReadPhysicalDrive9X Lib "DiskID.dll" (driveID As Long, buffer As Long, bufLen As Long) As Long
Private Declare Function ReadPhysicalDriveInNT Lib "DiskID.dll" (driveID As Long, buffer As Long, bufLen As Long) As Long

Private Type DRIVER_INFO_OK
    ModalNumber(39) As Byte
    SerialNumber(19) As Byte
    ControlNum(7) As Byte
    DriveType As Long
    Cylinders As Long
    Heads As Long
    Sectors As Long
End Type

Private Sub Command1_Click()
    Dim x As DRIVER_INFO_OK
    Dim i As Long
    If IsWinNT = 1 Then
        i = ReadPhysicalDriveInNT(ByVal 0, ByVal VarPtr(x), ByVal 256)
    Else
        i = ReadPhysicalDrive9X(ByVal 0, ByVal VarPtr(x), ByVal 256)
    End If
    Dim s As String
    s = StrConv(x.ModalNumber, vbUnicode)
    s = Left(s, InStr(1, s, Chr(0)) - 1)
    Debug.Print "ModalNumber: " + s
    s = StrConv(x.SerialNumber, vbUnicode)
    s = Left(s, InStr(1, s, Chr(0)) - 1)
    Debug.Print "SerialNumber: " + s
End Sub


а вот сама dll:
http://www.sql.ru/forum/actualfile.aspx?id=3231663

помогите перевести этот код на С# плз!!!

я тут начал делать, но не понял что надо сделать со вторым параметром в функции

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace testdiskid32
{
    public partial class Form1 : Form
    {
        struct DRIVER_INFO_OK
        {
            byte[] ModalNumber;
            byte[] SerialNumber;
            byte[] ControlNum;
            long DriveType;
            long Cylinders;
            long Heads;
            long Sectors;
        }

        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            long buffer;
            this.label1.Text = ExportDiskID32.IsWinNT().ToString();
            this.label2.Text = ExportDiskID32.ReadPhysicalDriveInNT(0, buffer, 256).ToString();
        }
    }

    public class ExportDiskID32
    {
        [DllImport("DiskID.dll", EntryPoint = "IsWinNT")]
        public static extern long IsWinNT();
        [DllImport("DiskID.dll", EntryPoint = "ReadPhysicalDrive9X")]
        public static extern long ReadPhysicalDrive9X(long driveID, long buffer, long bufLen);
        [DllImport("DiskID.dll", EntryPoint = "ReadPhysicalDriveInNT")]
        public static extern long ReadPhysicalDriveInNT(long driveID, long buffer, long bufLen);
    }
}


PM MAIL   Вверх
mr.DUDA
Дата 10.1.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Сорри, сейчас этого кода у меня нет (остался на предыдущей работе)... :(


--------------------
user posted image
PM MAIL WWW   Вверх
Xao
Дата 12.1.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 24.12.2007

Репутация: 1
Всего: 1



mr.DUDA, 
жаль(

а ты не мог бы показать пример использования этой длл, если помнишь?

хотел еще спросить существуют ли проги, которые бы смогли изменить Drive Model Number (disk32.exe), или Product ID, жесткого диска 

PM MAIL   Вверх
mr.DUDA
Дата 12.1.2008, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Xao @  12.1.2008,  13:41 Найти цитируемый пост)
пример использования этой длл

Всё сводится к получению серийника HDD, я просто взял стандартный идущий пример вместе с diskId и завернул его в экспортируемую функцию из DLL.


--------------------
user posted image
PM MAIL WWW   Вверх
Xao
Дата 13.1.2008, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 24.12.2007

Репутация: 1
Всего: 1



а как по поводу:

Цитата(Xao @  12.1.2008,  14:41 Найти цитируемый пост)
хотел еще спросить существуют ли проги, которые бы смогли изменить Drive Model Number (disk32.exe), или Product ID, жесткого диска 


???

PM MAIL   Вверх
VisualProgrammerNET
Дата 13.1.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



ммм... можно ли программно изменить вшитый аппаратно productId? ИМХО, нельзя. И ваще, цель подобной программы что-то не особо понятна...


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
Любитель
Дата 14.1.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Цитата(Xao @  10.1.2008,  04:47 Найти цитируемый пост)

в sprintf надо передавать char
а в CreateFile LPWSTR
пишет, что не может конвертировать

Утила немного крива написана smile Перводи всё на юникод (wsprintf, etc.).

Цитата(Xao @  10.1.2008,  18:59 Найти цитируемый пост)
я тут начал делать, но не понял что надо сделать со вторым параметром в функции

По ходу у тебя пример для VB6. Он сильно отличается от дотнетовского (конкретно судить не могу - ибо не знаю smile )

Код

unsafe struct DRIVER_INFO_OK
{
            fixed byte ModalNumber[39];
            fixed byte SerialNumber[19];
            fixed byte ControlNum[7];
            long DriveType;
            long Cylinders;
            long Heads;
            long Sectors;
}

//...

        [DllImport("DiskID.dll", EntryPoint = "ReadPhysicalDriveInNT")]
        public static extern unsafe long ReadPhysicalDriveInNT(long driveID, DRIVER_INFO_OK* buffer, long bufLen);


То есть с приведённой длл-кой (судя по сигнатурам, по крайней мере) - юзать ансейф. И передавать адрес структуры соответствующей. Вообще, по-моему эта длл-ка основана на тех же исходниках (все дороги ведут туда...) - проще "подправить" анменеджед функцию, чтобы она приняла удобный для тебя вид (чтобы всё тупо промарашллить можно было).

Плюс к тому заметь - в тех сорсах три функции. Не знаю, что там в 9x, но в нт-шках:
1. Одна работает лишь с админскими правами
2. Вторая не работает с саташными винтами :(

Нормально рабочая (в моём понимании - т. е. без админских прав и с любыми винтами) - та, которая юзает \\.\Scsi


--------------------
PM MAIL ICQ Skype   Вверх
AGENTxXx
Дата 3.4.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 8.6.2009

Репутация: нет
Всего: 1



Надеюсь кому-нибудь пригодится в будующем (т.к. вопрос вроде бы как не решен тут). Код проги которая выдает необходимую информацию:
Код

using System;
using System.Management;
using System.Management.Instrumentation;

namespace Win32_ComputerSystem
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {

            // сначала нам необходимо создать объект - запрос, в котором собственно и необходимо указать, что и откуда мы хотим получить
            ObjectQuery DiskQuery = new System.Management.ObjectQuery("select SerialNumber, Name, Description, InterfaceType from Win32_DiskDrive");
            // "Искатель" информации, приближенный аналог DataSet
            ManagementObjectSearcher DiskSearcher = new ManagementObjectSearcher(DiskQuery);
            ManagementObjectCollection DiskCollection = DiskSearcher.Get();
            foreach (ManagementObject DiskInfo in DiskCollection)
            {
                Console.WriteLine("Серийный номер жесткого диска: " + DiskInfo["SerialNumber"].ToString());
                Console.WriteLine("Имя жесткого диска: " + DiskInfo["Name"].ToString());
                Console.WriteLine("Описание жесткого диска: " + DiskInfo["Description"].ToString());
                Console.WriteLine("Интерфейс жесткого диска: " + DiskInfo["InterfaceType"].ToString());
            }
        }
    }
}


Добавлено через 1 минуту и 49 секунд
И да.. вот ссылочка где можно взять необходимые переменные для запроса (ну или использовать другой запрос): 
MSND
PM MAIL   Вверх
SKrivosein
Дата 4.4.2010, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



AGENTxXx у меня твой код неработает, выбрасывает ManagementException - неправильный запрос.
Пытаюсь найти в MSND причину. Я  эту тему неочень, но интересно...



--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.