powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не получается перевести простой пример с паскаля на вфп
19 сообщений из 19, страница 1 из 1
Не получается перевести простой пример с паскаля на вфп
    #36780409
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
на паскале, который я не знаю, прога, вызывающая функцию из дллки выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
type
  DiskInfo = packed record
    FirmwareRev:PChar;
    SerialNumber: PChar;
    ModalNumber: PChar;
    ECCByte: PChar;
    Heads: PChar;
    Sectors: PChar;
    LBASector: PChar;
    Bytes_Sector: PChar;
  end;
var disk:diskinfo;

Procedure info(drive:byte;var disk:diskinfo);stdcall; external 'getide.dll';
function about:Pchar;stdcall; external 'getide.dll';

begin
writeln(about);
info( 0 ,disk);
writeln('Firmware Revision: '+disk.FirmwareRev);
writeln('Serial number: '+disk.Serialnumber);
writeln('Modal number: '+disk.Modalnumber);
writeln('ECC Bytes: '+disk.eccbyte);
writeln('Heads: '+disk.heads);
writeln('Sectors: '+disk.heads);
writeln('LBASectors: '+disk.LBASector);
writeln('Bytes/Sectors: '+disk.bytes_sector);
end.
пример вроде как простой, и я пробовал на вфп так:
Код: plaintext
1.
2.
3.
4.
5.
sBuffer= repl(CHR( 32 ), 200 ) 
DECLARE INTEGER about IN getide.dll
DECLARE INTEGER info IN getide.dll INTEGER diskIndex,  STRING sDiskInfo
info ( 0 , @sBuffer)
*sBuffer = RTRIM(sBuffer)
?sBuffer
но на выходе - ерунда, причем ее очень мало и много повторов. Уникальных байт в ответе около 5 всего. Никакой похожей инфы на ту, что выдает паскальная прога и близко нет.
Я понял что packed record это на паскале - массив, но по хелпам в вфп не существует способа передать/получить массив от длл. тока число или стринг.

Как же перевести это правильней на вфп? Или такое вообще никак нельзя с вфп подружить?

спасибо
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36780455
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объявления на фоксе примерно так должны выглядеть:
Код: plaintext
1.
DECLARE STRING about IN getide.dll
DECLARE INTEGER info IN getide.dll INTEGER diskIndex,  STRING @sDiskInfo
Вызывать примерно так:
Код: plaintext
1.
lcDiskInfo = space( 100 )
info( 0 , @lcDiskInfo)

info() возвращает структуру с указателями на строки (PCHAR) с полезной инфой, т.е. в lcDiskInfo адреса в памяти, а инфа по этим адресам.
Как это прочитать средствами фокса я не знаю, в таких случаях я делаю обертку на Си и через нее вызываю.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36780457
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно WinAPI поюзать, часть инфы что дает твоя DLL-ка получишь:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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
);

BOOL GetDiskFreeSpace(
  LPCTSTR lpRootPathName,          // root path
  LPDWORD lpSectorsPerCluster,     // sectors per cluster
  LPDWORD lpBytesPerSector,        // bytes per sector
  LPDWORD lpNumberOfFreeClusters,  // free clusters
  LPDWORD lpTotalNumberOfClusters  // total clusters
);
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36783072
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо

нет, апи - это неправильно :) Проблема в том, что сия апи отдает инфу которая во-первых после форматирования раздела сменится (случай, конечно редкий, но винду переставил и бай-бай), а во-вторых и самых главных - она может быть одинаковой на разных РС благодаря использованию клон-софта, т.е. когда на 50 одинаковых РС накатили винду с образа, что у нас и наблюдается. В итоге однозначно идентифицировать РС не удается никакими средствами винды будь то WMI, подобные API-функции или инфа из реестра.

"моя" же длл-ка отдает железный серийник винта, что куда полезнее и то, что мне и надо. видать придется вместо юзания дллки напрямую запускать ехе-ху...
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36783239
FoxSoftware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Непонятно с какой целью это надо делать на фоксе?
2. Если для привязки к компу, то можно просто прочитать что выдаст systeminfo.exe и сгенерирвать ключ по нескольким параметрам. Например размер диска, размер памяти, сетевое имя и т.д.
Т.е. несколько параметров надо брать и генерить ключ!
В любом случае это бессмыслица, так как фоксовскую прогу взломать легко.
Лучше больше времени уделить самой сути прикладнины, чем защите от взлома.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36783265
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOнет, апи - это неправильно :)
...
"моя" же длл-ка отдает железный серийник винта...
Наивный, ты свою DLL сначала проверил бы хорошенько, прежде чем пытаться на ее основе что-либо делать.
Она без админских прав не работает.
У меня все пусто показывает под юзером, под админом нормально.
А "неправильное" API с любыми правами работает.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36783405
CTAC-KO"моя" же длл-ка отдает железный серийник винтаКакой наив. :) Запусти свою dll-ку на компе с RAID контроллером.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36829655
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди!!! Вы всех меряете одним мерилом! Мне это все надо вовсе не для защиты от взлома. Хотя это наиболее часто возникающий вопрос у других юзеров.
Мне это надо лишь для однозначной идентификации РС с которым работают. Все. Я хочу их все занести в таблицу, расписать их конфиги и инв. номера. По этой причине привязка на какие-то нежелезные вещи (volume serial number, WMI - все что с форматированием/переустановкой винды меняется) - не подходят.
Кроме того админу надо знать, что если что-то сделано, то с какого РС это сделали. Если подключили свой ноут для этого - админ хочет об этом знать хотя бы просто как о незареганном в системе РС.

Как я уже объяснял - имеется несколько десятков РС одинаковой конфигурации, на которых винда ("производителем") установлена клонированием и WMI/реестр у всех выдает одно и то же (в частности volume serial number), соотв. я и говорю что апи - нихт гуд. Не в целом, а в WMI-разрезе.

RAID-ы у юзеров? Спасибо, улыбнуло

Не работает на неадмине - проблема.

Можно было бы наверное "садиться" на МАС-адрес, но ё-маё, и тут поджидают менингиты - NIC-ов мб несколько, сетевые карты - по сути мелочь, которая иногда может умирать и заменяться. Если юзать все ники - все равно торба, тк VPN-ы, (если кому разрешено подключать) мобилы и тп - получим доп. сеть, и все это как резалт - новый РС в системе...

Вешаться на серинег винды? Не выход, т.к. есть перадки и у них он будет один и тот же на всех, опять же если корпоративный серийнег - он честный, но один на всех (собственно в перадках такой и юзается)... опять же реинстал винды=новый РС.

Ну вот и что же делать-то?
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36829666
CTAC-KORAID-ы у юзеров? Спасибо, улыбнуло Я рад за Вас. Но отсутствие RAID у Ваших юзеров не говорит об отсутствии таковых у других юзеров.
Ну вот и что же делать-то?Имя компа должно быть уникальным в сети. За уникальностью следит админ.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36829784
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, если компы в сети - то по именам.
А Everest Corporate Edition не пробовали привлекать для получения отчетов и аудита?
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36830002
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Everest - штука хорошая, но кроме того что палево так еще и невозможно заюзать его програмно. Он есть отдельный самодостаточный проект, в котором все что мне нужно - это 1-2%, а остальные 99% - лишний функционал. А мне хочется что-то простое, типа вот той длл-ки - запросил серийнег и фперед. То что админ должен - это хорошо, но наше програмистское дело - облегчать всем жизнь, как юзерам, так и админам. В недостижимом идеале - это дллина могла б сразу "снимать" весь конфиг РС-юка, чтобы для отчета сразу в таблицу апдейт мб сделать... да... недостижимая мечта, похоже. И неважно что для фоксы, если б это было в виде апишной дллины, то юзалось бы с любым языком...
Нечто подобное, выдающее лишь пару серийнегов, лишь в платном варианте видал.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36830076
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Организационные проблемы программными средствами не решаются. Никак. Никоим образом. Вы даже "облегчить жизнь" не сможете. Только усложнить. Причем как себе, так и тем, для кого Вы предположительно это все делаете.

Ну, обычная ситуация: вынули одну железяку из одного компа и воткнули ее в другой. И все! Вся система идет "лесом". Какая тут "идентификация" если "ключ идентификации" поменялся! Начинаются мучительные поиски того, а что вообще изменилось?

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

Ну, чтобы было понятно, Вас ведь не удивляет, что учет сотрудников ведется по табельным номерам, присваиваемым вне зависимости от каких-либо характеристик человека, а не, скажем, по номеру паспорта? Ну, или по ИНН? В данном случае подобная аналогия более чем уместна.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36830656
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOEverest - штука хорошая, но кроме того что палево так еще и невозможно заюзать его програмно...
Да-а-а... 100 баков заплатить сложно (ну, $700 за полсотни хостов) - лучше будем изобретать велик.
Насчёт "программно" - это, надеюсь, шутка? - ибо CSV или ADO обеспечат вам _любые_ запросы к базе...
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36831179
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ Организационные проблемы программными средствами не решаются. Никак. Основа основ любой учетной системы - это неизменный и однозначный ключ идентификации . В задаче учета компьютеров локальной сети - это может быть только и исключительно некий "внешний" идентификатор. "Внешний" в том смысле, что он не зависит от каких-либо свойств самого компьютера и присваивается из вне. В данном случае - это сетевое имя компьютера. А это имя банально определяется по SYS(0)да, Вы правы. Наверное стоит все же на сетевом имени и остановиться. В любом случае оно сети дб уникально. Действительно, привязываясь к серийнику харда я постоянно задней мыслью думал о ситуации миграции винта в др. РС. Поэтому больше хотелось зацепиться на серийник материнки с процом, но подобных решений нет вообще. Есть CPUID, но в эту инфу с АМД-процов серийнек вроде не входит, а для мамок - полный ноль решений вообще.
AndreTMCTAC-KOEverest - штука хорошая, но кроме того что палево так еще и невозможно заюзать его програмно...
Да-а-а... 100 баков заплатить сложно (ну, $700 за полсотни хостов) - лучше будем изобретать велик.
именно, так как государственная бюджетная организация. И возможно я ошибаюсь, но все равно у еереста нет апи-интерфейса. А чисто для однократного сбора инфы с каждого РС можно лично по ним пройтись с portable версией.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36831260
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO И возможно я ошибаюсь, но все равно у еереста нет апи-интерфейса. А чисто для однократного сбора инфы с каждого РС можно лично по ним пройтись с portable версией.
Командная строка вроде есть, в хелпе вот чего написано:
Everest HELP3. Is it possible to create reports automatically using command-line options?

Only EVEREST Corporate Edition supports command-line options. List of them can be reviewed in main menu / Help / Command-line Options. Full list of command-line options with explanation is available in the EVEREST Manual. Using command-line options it is possible to create reports with custom layout in any of the supported report formats. Created reports can be saved to file, inserted to SQL database, sent in e-mail or uploaded to a FTP server.
Эверест у меня 2006й, в новом может еще чего улучшилось в этом плане
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36832913
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, ну тогда с еверестом буду собирать локально конфиги РСюков для своей таблицы. По крайней мере надо будет хотябы попробовать.

Кстати говоря, если все же кому-то понадобится получение серийника HDD, то я нашел аж несколько решений, которые работают и с юзер-правами и некоторые даже с guest-правами. Это diskid32 (бесплатная, есть исходники на сях - вот ежели б кто оформил из этого fll - было бы вообще зд0рово), rlbyte HDDPhysic.dll (платная, 25 евро, актуальная версия 1.1, но к версии 1.0 можно найти keygen) и Akramsoft HardDiskSerial DLL (платная, $35)
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36833065
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Everest Corporate , про который и шёл разговор, есть всё необходимое - и анализ конфигурации, плюс хранение данных в любой SQL-базе, и анализ изменений, и аудит активности... в последних версиях вплоть до удаленного управления хостами.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36834927
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут подумал... Если использовать SYS(0)/ID() то возможна ситуация "клона". Да, в одном домене два одинаковых сетевых имени - исключено, а вот при доступе через инет... Единственный выход, недающий 100% гарантии - изврат сисадмина при именовании ведомственных РСюков. Ну или все же на винт цепляться - 100% уин при любых раскладах.
...
Рейтинг: 0 / 0
Не получается перевести простой пример с паскаля на вфп
    #36835054
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOЯ тут подумал... Если использовать SYS(0)/ID() то возможна ситуация "клона". Да, в одном домене два одинаковых сетевых имени - исключено, а вот при доступе через инет... Единственный выход, недающий 100% гарантии - изврат сисадмина при именовании ведомственных РСюков. Ну или все же на винт цепляться - 100% уин при любых раскладах.
Если надо просто компы идентифицировать и защита от подделки идентификатора компа не критична, то генери GUID, пиши куда-нибудь в профиль пользователя или пользовательскую ветку реестра вместе с SYS(0)/ID(). При изменении SYS(0)/ID() генери GUID заново.
Даже если админ компы клонировать будет - одинаковые имена всем дать не сможет.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не получается перевести простой пример с паскаля на вфп
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]