Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Cromatico en 26 Junio 2015, 17:53 pm



Título: (Solucionado) Ayuda obtener id de vb a c++
Publicado por: Cromatico en 26 Junio 2015, 17:53 pm
Buenas tardes estimados, estoy necesitando convertir esta parte de código que esta en vb.net a c++... La idea es poder hacer la misma función, pero para codeblocks c++...

Código:
 Public Function ProcessorID()
        Dim cpuInfo As String = String.Empty
        Dim temp As String = String.Empty
        Dim mc As ManagementClass = New ManagementClass("Win32_Processor")
        Dim moc As ManagementObjectCollection = mc.GetInstances
        For Each mo As ManagementObject In moc
            If (cpuInfo = String.Empty) Then
                cpuInfo = mo.Properties("ProcessorId").Value.ToString
                ProcessorID = cpuInfo
                Exit Function
            End If
        Next
        ProcessorID = cpuInfo
    End Function

Buscando por internet encontre esto:
Código:
void getPSN(char *PSN)
{
    int varEAX, varEBX, varECX, varEDX;
    char str[9];
    //%eax=1 gives most significant 32 bits in eax
    __asm__ __volatile__ ("cpuid"   : "=a" (varEAX), "=b" (varEBX), "=c" (varECX), "=d" (varEDX) : "a" (1));
    sprintf(str, "%08X", varEAX); //i.e. XXXX-XXXX-xxxx-xxxx-xxxx-xxxx
    sprintf(PSN, "%C%C%C%C-%C%C%C%C", str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7]);
    //%eax=3 gives least significant 64 bits in edx and ecx [if PN is enabled]
    __asm__ __volatile__ ("cpuid"   : "=a" (varEAX), "=b" (varEBX), "=c" (varECX), "=d" (varEDX) : "a" (3));
    sprintf(str, "%08X", varEDX); //i.e. xxxx-xxxx-XXXX-XXXX-xxxx-xxxx
    sprintf(PSN, "%s-%C%C%C%C-%C%C%C%C", PSN, str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7]);
    sprintf(str, "%08X", varECX); //i.e. xxxx-xxxx-xxxx-xxxx-XXXX-XXXX
    sprintf(PSN, "%s-%C%C%C%C-%C%C%C%C", PSN, str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7]);
}

Pero solo me devuelve la última parte del ID... Tienen idea si hay alguna alternativa para C++ que haga lo mismo? Imagino que si pero no estoy buscando bien...

Desde ya gracias!


EDIT: Ya esta, toqueteando como buen novato despues de varios intentos, agregue este bloquesito:

Código:
__asm__ __volatile__ ("cpuid"   : "=a" (varEAX), "=b" (varEBX), "=c" (varECX), "=d" (varEDX) : "a" (1));
    sprintf(str, "%08X", varEDX); //i.e. XXXX-XXXX-xxxx-xxxx-xxxx-xxxx
    sprintf(PSN, "%s-%C%C%C%C-%C%C%C%C", PSN,str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7]);

Y me trajo la primer parte del ID, ahora lo reacomodo y listo...

No se lo que hice y tampoco quiero saber por ahora JAJAJA, no se nada de asm...
No mentira, si alguien tiene conocimiento, digame que hice.

Saludos y solucionado.


Título: Re: (Solucionado) Ayuda obtener id de vb a c++
Publicado por: x64core en 28 Junio 2015, 01:36 am
No sé si exista una funcion especifica en C++ para obtener el nombre del CPU, pero especifico en Windows hay varias maneras de obtener el nombre: instrucción CPUID, WMI y el registro.

El registro es el menos recomendado, tratar de leer especificas direcciónes del resgitro no es seguro, se debe evitar lo más posible.

Instrucción CPUID: https://en.wikipedia.org/wiki/CPUID
La más detallada información la encontras en los PDFs de intel. CPUID se puede utilizar para obtener cierta información del procesador(es): nombre, nucleos, caracteristicas, etc.

Al menos en VC++ exista una funcion __cpuid que sirve para generar una instruccion cpuid dejando al compilador asunto como optimización y demás, sin usar ensamblador en el código C/C++.