powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Перевести структуру DISK_GEOMETRY в РВ
7 сообщений из 7, страница 1 из 1
Перевести структуру DISK_GEOMETRY в РВ
    #37186895
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для получения данных по комманде IOCTL_DISK_GET_DRIVE_GEOMETRY (значение см. winioctl.h) из функции DeviceIoControl есть структура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
/*Delphi*/
DISK_GEOMETRY = packed record
    Cylinders : LARGE_INTEGER;
    MediaType : Integer;
    TracksPerCylinder : DWORD;
    SectorsPerTrack : DWORD;
    BytesPerSector : DWORD;
  end;
Как её адаприровыать к РВ?
...
Рейтинг: 0 / 0
Перевести структуру DISK_GEOMETRY в РВ
    #37186988
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDNThe LARGE_INTEGER structure defines a 64-bit signed integer.

typedef struct _LargeInteger {
unsigned long hi;
long lo;
} LARGE_INTEGER;

hi: Upper 32 bits of the integer.

lo: Lower 32 bits of the integer.

For purposes of Microsoft Interface Definition Language (MIDL) compilation, the LARGE_INTEGER structure is equivalent to a 64-bit integer. Base representation of a 64-bit integer within the MIDL specification is as the __int64 or hyper types.

ИМХО:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
global type large_integer from structure
	unsignedlong	hi
	long		lo
end type

global type disk_geometry from structure
	LARGE_INTEGER	Cylinders
	integer		MediaType
	long		TracksPerCylinder
	long		SectorsPerTrack
	long		BytesPerSector
end type

Хотя, на счет "integer MediaType" могу обшибиться, не помню, на сколкьо РВ-шный Integer соответствует... Эксперементиовать надо.
...
Рейтинг: 0 / 0
Перевести структуру DISK_GEOMETRY в РВ
    #37189040
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IkarХотя, на счет "integer MediaType" могу обшибиться, не помню, на сколкьо РВ-шный Integer соответствует... Эксперементиовать надо.
Integer Delphi = long PB.
...
Рейтинг: 0 / 0
Перевести структуру DISK_GEOMETRY в РВ
    #37189207
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за советы, но чего-то все равно не выходит.
РВ10.5. Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
/*обращаюсь к диску*/
lul_hDisk = CreateFile( "\\.\C:", GENERIC_READ, FILE_SHARE_READ_OR_WRITE,  0 , OPEN_EXISTING,  0 ,  0 )
/*и так пробывал "\\.\PhysicalDrive0"*/
/*всегда - ОК*/

Constant ULong  IOCTL_DISK_GET_DRIVE_GEOMETRY =  458752 
DISK_GEOMETRY dg
lul_lpOutBuffer = uo_sizeof.sizeof(dg)

/*тест*/
If DeviceIoControl( lul_hDisk, IOCTL_DISK_GET_DRIVE_GEOMETRY,  0 ,  0 , dg, lul_lpOutBuffer, lul_lpBytesReturned,  0 ) =  0  Then
   Messagebox("GET_DRIVE_GEOMETRY", "INVALID_HANDLE_VALUE")
END
Вот тест не проходит, структура без данных.
Может где-то в другом месте ошибка?
т.к. в опытах с другими командами (IOCTL_STORAGE_GET_DEVICE_NUMBER, IOCTL_DISK_GET_LENGTH_INFO) информацию получаю, соответствующие структуры с данными.
...
Рейтинг: 0 / 0
Перевести структуру DISK_GEOMETRY в РВ
    #37189224
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISСпасибо за советы, но чего-то все равно не выходит.
Вы решили проверить наши телепатические способности? :)

Для начала приведите вашу декларацию для каждой структуры, декларацию внешней функции и значение которое вернула функция.
А также ваше значение lul_lpOutBuffer которое при правильном вызове должно быть равно 24.
...
Рейтинг: 0 / 0
Перевести структуру DISK_GEOMETRY в РВ
    #37189225
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А-а ё!

Всё заработало.
Всем большое спасибо!
...
Рейтинг: 0 / 0
Перевести структуру DISK_GEOMETRY в РВ
    #37189239
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky ,
да, значение lul_lpOutBuffer = 24.

P.S. создал новую структуру, как посоветовали, а в скрипте забыл имя поменять. :))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Перевести структуру DISK_GEOMETRY в РВ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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