Visual C++ .NET - Quitar Hardware con Seguridad

 
Vista:
Imágen de perfil de Humberto

Quitar Hardware con Seguridad

Publicado por Humberto (1 intervención) el 11/08/2011 15:08:40
Buenos Días para todos

Los molesto porque he estado (desde hace una semana) intentando desarrollar un botón que permita "Quitar el Hardware con Seguridad" en mi aplicación desde un botón.

REALIZADO AL MOMENTO
Al presionar el Botón me aparece una ventana donde debo seleccionar el Dispositivo.

QUISIERA
Que lo apague sin mostrar la ventana IGUAL que lo hace el Icono de Window en la Barra de Tareas.

¿Podrían darme una mano para lograrlo?

Si alguno esta en la misma inquietud
¿Desearía contactarse conmigo para hacerlo juntos he intercambiar conocimientos?

Les agradezco aunque más no sea por leerme. Que tengan un gran día
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Desconectar hardware con seguridad desde una aplicación

Publicado por Alejandro (265 intervenciones) el 09/02/2024 18:35:57
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
#include <Windows.h>
#include <Ntddscsi.h>
#include <cfgmgr32.h>
 
// Función para desconectar hardware con seguridad
void DesconectarHardwareSeguro(const wchar_t* nombreDispositivo) {
    HDEVINFO hDevInfo = SetupDiGetClassDevs(nullptr, nullptr, nullptr, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
 
    if (hDevInfo == INVALID_HANDLE_VALUE) {
        // Manejar el error
        return;
    }
 
    SP_DEVINFO_DATA devInfoData = {};
    devInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
 
    // Iterar sobre los dispositivos presentes
    for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &devInfoData); ++i) {
        // Obtener el nombre del dispositivo
        wchar_t buffer[256];
        if (SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_DEVICEDESC, nullptr, reinterpret_cast<PBYTE>(buffer), sizeof(buffer), nullptr)) {
            if (wcsstr(buffer, nombreDispositivo) != nullptr) {
                // Obtener la interfaz de dispositivo
                SP_DEVICE_INTERFACE_DATA devInterfaceData = {};
                devInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
 
                if (SetupDiEnumDeviceInterfaces(hDevInfo, &devInfoData, &GUID_DEVINTERFACE_DISK, 0, &devInterfaceData)) {
                    // Obtener los detalles de la interfaz de dispositivo
                    SP_DEVICE_INTERFACE_DETAIL_DATA* devInterfaceDetailData = nullptr;
                    DWORD requiredSize = 0;
 
                    SetupDiGetDeviceInterfaceDetail(hDevInfo, &devInterfaceData, nullptr, 0, &requiredSize, nullptr);
 
                    devInterfaceDetailData = reinterpret_cast<SP_DEVICE_INTERFACE_DETAIL_DATA*>(new char[requiredSize]);
                    devInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
 
                    if (SetupDiGetDeviceInterfaceDetail(hDevInfo, &devInterfaceData, devInterfaceDetailData, requiredSize, nullptr, nullptr)) {
                        // Obtener el nombre del dispositivo
                        const wchar_t* nombreDispositivoReal = devInterfaceDetailData->DevicePath;
 
                        // Desconectar el hardware con seguridad
                        if (CM_Request_Device_EjectW(devInfoData.DevInst, nullptr, nullptr, 0, 0) == CR_SUCCESS) {
                            wprintf(L"Se desconectó el hardware con seguridad: %s\n", nombreDispositivoReal);
                        } else {
                            // Manejar el error
                            wprintf(L"No se pudo desconectar el hardware con seguridad.\n");
                        }
                    }
 
                    delete[] devInterfaceDetailData;
                }
            }
        }
    }
 
    SetupDiDestroyDeviceInfoList(hDevInfo);
}
 
int main() {
    const wchar_t* nombreDispositivo = L"Nombre del dispositivo"; // Reemplazar con el nombre real del dispositivo
 
    // Llamar a la función para desconectar hardware con seguridad
    DesconectarHardwareSeguro(nombreDispositivo);
 
    return 0;
}

Humberto, este código utiliza la API de Windows para interactuar con la administración de dispositivos y solicitar la desconexión del hardware con seguridad. Ten en cuenta que este código es solo un ejemplo y puede requerir ajustes según tus necesidades y la configuración específica de tu sistema. Además, ten cuidado al desconectar dispositivos, ya que puede causar pérdida de datos si no se hace correctamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar