-
Как программно определить уникальность рабочей станции? Ну к примеру комплектующим компа...
-
что подразумевать под уникальностью? имхо, каждый комп уникален, но собран из стандартных комплектующих...
-
> [0] apic (17.01.12 16:28)
по серийным номерам.
-
В общем случае - никак. Если "я его слепила из того что было" - тогда есть вероятность, что у соседа за стенкой нет точно такой же MB, CPU, Video, такого же обьема памяти... Если это что-нибудь из Kraftway,Depo,Excimer или из "местных брендов" (в каждом крупном городе есть такие в крупных компьютерных салонах, в Екатеринбурге я насчитал штуки 4) - тогда сборка поставлена на поток и "серийник" можно вытянуть разве что из HDD, да и то (по-моему) с Вистой или Вынь7 есть некоторые проблемы.
-
Проще всего по МАС адресу сетевой карты или любого другого ус-ва.
-
Dimka Maslov : а есть код, работающий под всеми Windows ? Кстати, один распространенный способ получения MAC через NB30 работает, пока в разъеме сетевой карты есть подключенный к коммутатору кабель. Кабель выключаешь - фигвам. "или любого другого ус-ва" - а вот это не понял...
-
UuidCreateSequential работает под всеми осями
-
> "или любого другого ус-ва" - а вот это не понял...
Синезуб или вай-фай тоже имеют МАС-адрес
-
Не нужно забывать, что рабочая станция может не иметь ни сетевой карты, ни синезуба, ни вайфая. Могу привести с десяток примеров, где такие компы применяются. Поэтому, без конкретики, в общем случае, задача не имеет решения.
Внешнее USB-устройство с "зашитым" уникальным номером и средства доступа к этому устройству (API) - тогда, может быть, уже будет "теплее"...
-
Насчет МАС-адресов сетевух, сам лично встречал случае, когда на китайчком железе они, во первых не уникальны, во вторых изменяются после перезагрузке. На счет конкретики комплектации, это да, все, что оперативно можно снять, откидываем. Остается - чипсет (мат плата), BIOS, проц, память оперативная, жесткий диск, сетевая карта, видеокарта, ну в принципе и все, всего остального можно считать, что нету.
-
-
[10]: Для ЧЕГО используется ? Сами-то хоть указанную ссылку читали ? И как насчёт аргументов из [8] ?
-
> Для ЧЕГО используется
В широковещательных сетях (таких, как сети на основе Ethernet) MAC-адрес позволяет уникально идентифицировать каждый узел сети и доставлять данные только этому узлу . если не подходит - хотелось бы услышать непосредственно описание задачи.
-
"уникально идентифицировать каждый узел сети " "программно определить уникальность рабочей станции"
"Рабо́чая ста́нция (англ. workstation) — комплекс аппаратных и программных средств, предназначенных для решения определённого круга задач. Рабочая станция как место работы специалиста представляет собой полноценный компьютер или компьютерный терминал (устройства ввода-вывода, отделённые и часто удалённые от управляющего компьютера), набор необходимого ПО, по необходимости дополняемые вспомогательным оборудованием: печатающее устройство, внешнее устройство хранения данных на магнитных и/или оптических носителях, сканер штрих-кода и пр.
-
стесняюсь спросить, а сетевого имени недостаточно?
-
сети может вообще не быть, а имя уж тем более может быть не уникально...
-
> И как насчёт аргументов из [8] ?
Адрес, использующийся в функции UuidCreateSequential будет браться из "железа", а не из перепрошиваемого "драйвера", иначе не удасться добиться "глобальной уникальности" идентификатора.
-
Поясните пожалуйста как мне может помочь UuidCreateSequential и как мне им воспользоваться что бы она мне помогла.
-
> apic (25.01.12 05:59) [17]
Данная функция (её заголовка нет, надо подключать отдельно) выдаёт глобально уникальный идентификатор GUID, в который в явном виде входит МАС-адрес сетевой карты): function GetPermanentEthernetAddress: String;
var
Func: function(var guid: TGUID): Integer stdcall;
Lib: HINST;
R: Integer;
Guid: TGuid;
begin
Result := '';
Lib := LoadLibrary('RPCRT4.DLL');
Func := GetProcAddress(Lib, 'UuidCreateSequential');
if Assigned(@Func) then begin
R := Func(Guid);
if R = 0 then begin
for R := 2 to 7 do Result := Result + IntToHex(Guid.D4[R], 2);
end;
end;
end;
-
[16] : и "железный" MAC при большом желании можно сменить [17] : А может быть все-таки поставленную задачу конкретизировать ?
"баловался" я раньше таким, вычислял хэши уникальных данных комплектующих, складывал из них последовательность и получал уникальный номер. Но с появлением новых ОС и новых интерфейсов, обязательного условия запускать прогу под админом и др. и пр. - плюнул и забыл. Кстати, всё есть в реестре, в XP - ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum. Ищите да обрящете.
-
> и "железный" MAC при большом желании можно сменить
Если рассматривать все клинические проявления, то вообще ничего написать не получится.
-
[20] : Согласен. Но, вспомним одну умную мысль : правильно поставленная задача - наполовину решенная задача. Поэтому, подождем ответа топикстартёра. Если "привязать" сетевую программу к компам, включенным в сеть - это одно. Если "сделать так, чтобы програма работала только на одной машине" - это уже сложнее.
-
> это уже сложнее.
Всё просто: комп выдирается из сети, из него удаляются все дисководы, usb-порты и проч. ус-ва передачи информации. Главное - не забыть до этого поставить туда прогу
-
я так и не понял, для чего это нужно? какие требования к уникальности итп? ...
-
> я так и не понял, для чего это нужно?
Насколько я понял из топика на Королевстве никаких серьёзных требований нет. Изначальное требование уникального серийного номера только дань моде. Типа привязка к железу это круто!
-
тогда серийник винта (на котором ОС) и вперед, ибо это самая менее заменяемая деталь)
-
[25] А какими методами Вы получаете серийник винта на Wista/Win7 под пользователем ?
-
Ладно всем огромное спасибо, пожалуй соглашусь, что уникальность рабой станции вычислить не возможно, особенно под учетной записью без административных прав.
-
function getid:string; //получить id винта var VolumeName, FileSystemName : array [0..MAX_PATH-1] of Char; VolumeSerialNo : DWord; MaxComponentLength,FileSystemFlags: Cardinal; begin GetVolumeInformation('C:\',VolumeName,MAX_PATH,@VolumeSerialNo,MaxComponentLengt h,FileSystemFlags, FileSystemName,MAX_PATH); result:=IntToHex(VolumeSerialNo, 8); end;
-
Наклеить бирку с уникальным ID
|