Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ansi to Unicode, Ansi to Unicode 
V
    Опции темы
Чучмек
Дата 18.7.2011, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



А где выделяется память под STORAGE_DEVICE_DESCRIPTOR ?


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Artem148
Дата 18.7.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Постоялец
*


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

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



А-а, даже если обнулять, то ошибка выскакивает...

P.S Функция "ZeroMemory" заполняет указанный фрагмент памяти нулями ("обнуляет"),
      а выделяется при чтении декларации (Слово "Var"  smile )   smile 

Это сообщение отредактировал(а) Artem148 - 18.7.2011, 21:35
PM MAIL WWW   Вверх
Чучмек
Дата 18.7.2011, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Цитата(Artem148 @  18.7.2011,  18:06 Найти цитируемый пост)
STORAGE_DEVICE_DESCRIPTOR        : PSTORAGE_DEVICE_DESCRIPTOR;



Цитата(Artem148 @  18.7.2011,  18:06 Найти цитируемый пост)
PSTORAGE_DEVICE_DESCRIPTOR = ^_TSTORAGE_DEVICE_DESCRIPTOR;


var выделит 4 байта под указатель



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Чучмек
Дата 18.7.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Код

type
  PSTORAGE_PROPERTY_QUERY = ^_TSTORAGE_PROPERTY_QUERY;
  TSTORAGE_PROPERTY_QUERY = packed record
    PropertyId:              Integer;
    QueryType:               Integer;
    AdditionalParameters: array [0..1] of WORD;
  end;
  _TSTORAGE_PROPERTY_QUERY = TSTORAGE_PROPERTY_QUERY;
type
 Storage_Bus_Type = ( BusTypeUnknown,
                      BusTypeScsi,
                      BusTypeAtapi,
                      BusTypeAta,
                      BusType1394,
                      BusTypeSsa,
                      BusTypeFibre,
                      BusTypeUsb,
                      BusTypeRAID );
type
 PSTORAGE_DEVICE_DESCRIPTOR = ^_TSTORAGE_DEVICE_DESCRIPTOR;
 TSTORAGE_DEVICE_DESCRIPTOR = record
   Version :               dword;
   Size :                  dword;
   DeviceType :            UCHAR;
   DeviceTypeModifier :    UCHAR;
   RemovableMedia :        BOOLEAN;
   CommandQueueing :       BOOLEAN;
   VendorIdOffset :        dword;
   ProductIdOffset :       dword;
   ProductRevisionOffset : dword;
   SerialNumberOffset :    dword;
   BusType :               STORAGE_BUS_TYPE;
   RawPropertiesLength :   dword;
   RawDeviceProperties :   array[1..500]of CHAR;
 end;
 _TSTORAGE_DEVICE_DESCRIPTOR = TSTORAGE_DEVICE_DESCRIPTOR;
function GetProductId(Device: PChar): String;
var
 hDevice        : THandle;
 ReturnedLength : THandle;
 STORAGE_DEVICE_DESCRIPTOR        : TSTORAGE_DEVICE_DESCRIPTOR;
 STORAGE_PROPERTY_QUERY           : TSTORAGE_PROPERTY_QUERY;
begin
  hDevice := CreateFile(pchar('\\.\' + Device),
           GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE,
                                                 nil, OPEN_EXISTING, 0, 0);
  ZeroMemory(@STORAGE_PROPERTY_QUERY, SizeOf(STORAGE_PROPERTY_QUERY));
  if hDevice <> INVALID_HANDLE_VALUE then
    if DeviceIoControl(hDevice,
                       IOCTL_STORAGE_QUERY_PROPERTY,
                       @STORAGE_PROPERTY_QUERY,
                       sizeof(STORAGE_PROPERTY_QUERY),
                       @STORAGE_DEVICE_DESCRIPTOR,
                       sizeof(STORAGE_DEVICE_DESCRIPTOR),
                       ReturnedLength,
                       nil  ) then
      begin
        Result := PAnsiChar(Сardinal(@STORAGE_DEVICE_DESCRIPTOR) + STORAGE_DEVICE_DESCRIPTOR.ProductIdOffset);
      end;
end;



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Artem148
Дата 19.7.2011, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Постоялец
*


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

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



Чучмек - волшебник...  smile 

Если не затруднит: объясните в чём ошибка?

Спасибо всем за помощь!
PM MAIL WWW   Вверх
Чучмек
Дата 19.7.2011, 21:43 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



Прежде чем передавать  в функцию указатель на структуру, нужно сначала выделить память под оную.(new(),getmem() и др.)
А указатель в var указывает в никуда.
 "Собака" возвращает указатель на память выделенную для переменной.
sizeof для любого указателя возвращает 4.


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




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


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

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