• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

ик порт

  • Автор темы Tsnok
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

Tsnok

Всем привет.
Кто знает как можно из мод Дельфи проверить наличие ик порта.
Не откажусь от примеров на С.

Благодарю за помощь.
 
Z

zubr

Вот код определения модемов в системе:
Код:
type
SP_DEVINFO_DATA=record
 cbSize:DWord;
 ClassGuid:TGuid;
 DevInst:DWord; 
 Reserved:LongInt;
end;

PSP_DEVINFO_DATA=^SP_DEVINFO_DATA;
PGuid=^TGuid;

const
DIGCF_ALLCLASSES=$00000004;
DIGCF_PRESENT=$00000002;
DIGCF_PROFILE=$00000008;
DIGCF_DEVICEINTERFACE=$00000010;
SPDRP_DEVICEDESC=$00000000;


function SetupDiCreateDeviceInfoList(ClassGuid:PGuid;
 hwndParent:cardinal):Pointer; stdcall;
 external 'setupapi.dll';
function SetupDiGetClassDevsExA(ClassGuid:PGuid; Enumerator:PChar;
 hwndParent:cardinal; Flags:DWord; DeviceInfoSet:Pointer;
 MachineName:PChar; Reserved:DWord):Pointer; stdcall;
 external 'setupapi.dll';
function SetupDiGetDeviceRegistryPropertyA(DeviceInfoSet:Pointer;
 DeviceInfoData:PSP_DEVINFO_DATA; Property_:DWord; PropertyRegDataType:Pointer;
 PropertyBuffer:Pointer; PropertyBufferSize:cardinal; RequiredSize:Pointer):
 longbool; stdcall;
 external 'setupapi.dll';
function SetupDiEnumDeviceInfo(DeviceInfoSet:Pointer; MemberIndex:DWord;
 var DeviceInfoData:SP_DEVINFO_DATA):longbool; stdcall;
 external 'setupapi.dll';
function SetupDiDestroyDeviceInfoList(DeviceInfoSet:Pointer):longbool; stdcall;
 external 'setupapi.dll';


procedure TForm1.Button2Click(Sender: TObject);
var
hAllDevices, hDev:Pointer;
k:Integer;
Data:SP_DEVINFO_DATA;
dwInfo, dwRequired, sz:DWord;
buf:PChar;
g:TGuid;
s:string;
begin
hDev:=SetupDiCreateDeviceInfoList(nil, 0);
k:=GetLastError;
ShowMessage(IntToStr(k));
g:=StringToGuid('{4D36E96D-E325-11CE-BFC1-08002BE10318}');//это гуид модемов, тебе надо найти в MSDN гуид ИК-портов
hAllDevices:=SetupDiGetClassDevsExA(@g, nil, 0, DIGCF_PRESENT {or DIGCF_ALLCLASSES},
hDev, nil, 0);
k:=GetLastError;
ShowMessage(IntToStr(k));
FillChar(Data, SizeOf(SP_DEVINFO_DATA), 0);
Data.cbSize:=SizeOf(SP_DEVINFO_DATA);
dwInfo:=0;
If not SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) then
ShowMessage('Error');
While SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) do
begin
dwRequired:=0;
If (not SetupDiGetDeviceRegistryPropertyA(hAllDevices, @Data, 
 SPDRP_DEVICEDESC,
 nil, nil, 0, @dwRequired)) and (GetLastError=ERROR_INSUFFICIENT_BUFFER) then
begin
 sz:=dwRequired;
 buf:=StrAlloc(100);
 FillChar(buf^, 100, #0);
 If SetupDiGetDeviceRegistryPropertyA(hAllDevices, @Data, SPDRP_DEVICEDESC,
 nil, @buf^, 100, @dwRequired) then
 begin
 s:=string(buf);
 Memo1.Lines.Add(s);
 end;
 StrDispose(buf);
end;
inc(dwInfo);
end;
SetupDiDestroyDeviceInfoList(hAllDevices);
SetupDiDestroyDeviceInfoList(hDev);
end;
В твоем случае надо заменить только гуид, или для отображения всего оборудования вместо гуид поставь nil
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!