Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 19.05.2024
Сообщений: 1

Как узнать версию PCI-E и как туда записать строку с данными?

19.05.2024, 16:19. Показов 2497. Ответов 1
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
В общем пытался узнать версию через WMIC, максимум что удалось узнать это два слота и только у одного кол-во линий удалось найти, но не версию. В общем решение строки данных на PCI искал на плюсах максимум что удалось достичь это перечислить все устройства PCI на компьютере:
вот ссылка на html файл того что у меня выводит с помощью команды wmic systemslot get * : https://drive.google.com/file/... sp=sharing
Визуально не вариант, нужно программно


C++
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <windows.h>
#include <setupapi.h>
#include <iostream>
#include <string>
#include <vector>
 
#pragma comment(lib, "setupapi.lib")
 
void transfer()
{
    HDEVINFO deviceInfoSet = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);
    if (deviceInfoSet == INVALID_HANDLE_VALUE)
    {
        std::cerr << "Failed to get device information set. Error: " << GetLastError() << std::endl;
        return;
    }
 
    SP_DEVINFO_DATA deviceInfoData;
    deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    DWORD deviceIndex = 0;
 
    bool deviceFound = false;
 
    while (SetupDiEnumDeviceInfo(deviceInfoSet, deviceIndex, &deviceInfoData))
    {
        deviceIndex++;
 
        DWORD requiredSize = 0;
        SetupDiGetDeviceInstanceId(deviceInfoSet, &deviceInfoData, NULL, 0, &requiredSize);
        std::vector<wchar_t> deviceInstanceId(requiredSize);
        if (SetupDiGetDeviceInstanceId(deviceInfoSet, &deviceInfoData, &deviceInstanceId[0], requiredSize, NULL))
        {
            std::wstring instanceId(&deviceInstanceId[0]);
            std::wcout << L"Device Instance ID: " << instanceId << std::endl;
            //PCI\VEN_1022&DEV_1485&SUBSYS_14851022&REV_00\4&1FDE7688&0&0041
            //PCI\\VEN_10DE&DEV_10F0
            if (instanceId.find(L"PCI\\VEN_1022&DEV_1485") != std::wstring::npos)
            {
                deviceFound = true;
 
                SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
                deviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
 
                // Пробуем все возможные GUID
                for (int i = 0; ; ++i)
                {
                    if (!SetupDiEnumDeviceInterfaces(deviceInfoSet, &deviceInfoData, NULL, i, &deviceInterfaceData))
                    {
                        if (GetLastError() == ERROR_NO_MORE_ITEMS)
                        {
                            break;
                        }
                        else
                        {
                            std::cerr << "Failed to enumerate device interfaces. Error: " << GetLastError() << std::endl;
                            continue;
                        }
                    }
 
                    SetupDiGetDeviceInterfaceDetail(deviceInfoSet, &deviceInterfaceData, NULL, 0, &requiredSize, NULL);
 
                    std::vector<BYTE> buffer(requiredSize);
                    SP_DEVICE_INTERFACE_DETAIL_DATA* deviceInterfaceDetailData = reinterpret_cast<SP_DEVICE_INTERFACE_DETAIL_DATA*>(&buffer[0]);
                    deviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA::DevicePath);
 
                    if (SetupDiGetDeviceInterfaceDetail(deviceInfoSet, &deviceInterfaceData, deviceInterfaceDetailData, requiredSize, NULL, NULL))
                    {
                        std::wcout << L"Device Path: " << deviceInterfaceDetailData->DevicePath << std::endl;
 
                        HANDLE deviceHandle = CreateFile(
                            deviceInterfaceDetailData->DevicePath,
                            GENERIC_READ | GENERIC_WRITE,
                            0,
                            NULL,
                            OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL,
                            NULL
                        );
 
                        if (deviceHandle == INVALID_HANDLE_VALUE)
                        {
                            std::cerr << "Failed to open device. Error: " << GetLastError() << std::endl;
                        }
                        else
                        {
                            std::string buffer = "Hello, PCI device!";
                            DWORD written;
                            if (!WriteFile(deviceHandle, buffer.c_str(), buffer.size(), &written, NULL))
                            {
                                std::cerr << "Failed to write to device. Error: " << GetLastError() << std::endl;
                            }
                            else
                            {
                                std::cout << "Successfully wrote to device." << std::endl;
                            }
                            CloseHandle(deviceHandle);
                        }
                    }
                    else
                    {
                        std::cerr << "Failed to get device interface detail. Error: " << GetLastError() << std::endl;
                    }
                }
            }
        }
        else
        {
            std::cerr << "Failed to get device instance ID. Error: " << GetLastError() << std::endl;
        }
    }
 
    if (!deviceFound)
    {
        std::cerr << "No matching device found." << std::endl;
    }
 
    SetupDiDestroyDeviceInfoList(deviceInfoSet);
}
 
int main()
{
    transfer();
    return 0;
}
Потом нашел код который вроде как должен отправлять строку байт на слот PCI при помощи CreateFile() и WriteFile() :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
string Buffer; //строка, которая будет передана устройству
DWORD  Written; //количество переданных байт
 
void transfer()
{
    HANDLE Device; //дескриптор устройства
 
    Device = CreateFile("\\.\Device0",
                         GENERIC_WRITE,
                         0,
                         NULL,
                         CREATE_ALWAYS,
                         FILE_ATTRIBUTE_NORMAL,
                         NULL); //создание десктриптора
 
    WriteFile(Device,
              Buffer.c_str(),
              Buffer.length(),
              &Written,
              NULL); //запись
 
    CloseHandle(Device); //закрытие дескриптора устройства
}

Как всё таки добиться отправки данных на слот pci-e, сижу голову уже всю сломал
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.05.2024, 16:19
Ответы с готовыми решениями:

Как узнать версию ОС и записать её в edit?
Примеры прочитал, но мне кажется, что это &quot;У&quot;, и есть решение попроще и покороче.

Как создать файл и записать туда строку?
if (!File.Exists(&quot;WI-FI.cmd&quot;)) { File.Create(&quot;WI-FI.cmd&quot;); } ...

Как узнать версию Windows и записать в переменную string?
Ну например вывод в стринг такого типа : Windows 10 Professional или Windows 8.1 Home и т.д. Нашел на форуме похожее, но не то. Буду...

1
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
20.05.2024, 17:00
Лучший ответ Сообщение было отмечено serago как решение

Решение

Цитата Сообщение от serago Посмотреть сообщение
но не версию
Программа GPU-Z для точного определения версии и количества линий предлагает запустить мини-бенчмарк. Отсюда можно сделать вывод, что простым обращением к функциям API такая информация не извлекается.

Цитата Сообщение от serago Посмотреть сообщение
Как всё таки добиться отправки данных на слот pci-e
Отправить данные можно на устройство, согласно его аппаратному интерфейсу, но крайне сомнительно, что существует высокоуровневый способ отправки чего-либо именно на слот. Разве что из драйвера, и то не факт.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2024, 17:00
Помогаю со студенческими работами здесь

Как в DataGridView записать программно данные, добавить строку и вывести туда итог
Доброе время суток! Подскажите пожалуйста как сделать следующее У меня вывело результат из mysql хочу красиво дописать в низу строку...

Как узнать версию веб-сервера? через командную строку
Как узнать версию веб-сервера? через командную строку

Кмак узнать версию PCI-Express x16?
Помоте! Не знаю как узнать версию PCI-Express x16. Мож кто подскажет?

Как создать файл и записать туда информацию
как создать файл Jurnal.txt using System; using System.IO; using System.Collections.Generic; using System.Linq; using...

Как узнать версию ОС?
У меня задача стоит, сделать проверку операционки, чтобы задействовать правильный участок скрипта для задания ДНС. Ведь, как известно, в ХР...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru