Сейчас на форуме: asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Определить параметр GetVolumeInformation
Посл.ответ Сообщение

Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 25 января 2012 10:08 · Поправил: dimka_new
· Личное сообщение · #1

Доброго времени

Пишу кейген для одной программки, с алгоритмом формирования серийника разобрался - остался только один бастион - как программа формирует индивидуальный номер компьютера - что бы юзеру не вводить в ручную, все вставлялось бы автоматом.
Брякаюсь на функции GetVolumeInformationA

[img] [/img]

немного ниже программа получает значение - "-64433616"

[img] [/img]

Вроде перепробовал все параметры функции - не могу догнать откуда получается это число - и еще с отрицательным значением ? Или автор использует что-то свое?

NIKOLA
Пробовал играться с функцией -больше интересует вопрос почему число со знаком минус, может автор чето намутил/ Ладно попробую получить серийник диска - погляжу что получится




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 25 января 2012 10:14
· Личное сообщение · #2

BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // address of root directory of the file system
LPTSTR lpVolumeNameBuffer, // address of name of the volume
DWORD nVolumeNameSize, // length of lpVolumeNameBuffer
LPDWORD lpVolumeSerialNumber, // address of volume serial number
LPDWORD lpMaximumComponentLength, // address of system's maximum filename length
LPDWORD lpFileSystemFlags, // address of file system flags
LPTSTR lpFileSystemNameBuffer, // address of name of file system
DWORD nFileSystemNameSize // length of lpFileSystemNameBuffer
)

lpVolumeSerialNumber - здесь и есть серийный номер тома



Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 25 января 2012 10:29 · Поправил: dimka_new
· Личное сообщение · #3

Вообщем накатал утиль - получаю VolumeSerialNumber - в разных системах номер разный (и в жертве тоже), попробую отловить где формируется строка в отладчике

Udd

DimitarSerg - спасибо все получилось, блин опыта маловато - постоянно с типами путаюсь, вот накатал код:

Code:
  1.  var
  2.  VolumeName,  FileSystemName : array [0..MAX_PATH-1] of Char;
  3.  VolumeSerialNo : DWord;
  4.  MaxComponentLength,FileSystemFlags: Cardinal;
  5.  begin
  6.  GetVolumeInformation('C:',VolumeName,MAX_PATH,@VolumeSerialNo,
  7.  MaxComponentLength,FileSystemFlags, FileSystemName,MAX_PATH);
  8.  ShowMessage (Format('%d', [VolumeSerialNo,8]));
  9.  end;





Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 25 января 2012 10:30
· Личное сообщение · #4

dimka_new пишет:
Вроде перепробовал все параметры функции - не могу догнать откуда получается это число - и еще с отрицательным значением ? Или автор использует что-то свое?



Вряд ли что-то свое.
Имхо - простое преобразование типов
У меня ИД = FAAE3864 = -89245596 (signed integer)

-----
ds


| Сообщение посчитали полезным: dimka_new


Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 25 января 2012 11:36
· Личное сообщение · #5

dimka_new пишет:
в разных системах номер разный (и в жертве тоже)

что имеете ввиду? что на другом компе номер другой? или возвращаемые значение в твоей программе и программе цели?



Ранг: 33.8 (посетитель), 38thx
Активность: 0.060
Статус: Участник

Создано: 25 января 2012 11:42
· Личное сообщение · #6

Dart Sergius

В родной системе и на виртуалке значения номера диска разные и в программе-жертве соответственно тоже. Проверил что привязка идет именно к серийному номеру диска.


 eXeL@B —› Вопросы новичков —› Определить параметр GetVolumeInformation
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати