CeGetSystemInfo no ocupa toda la estructura pasado por referencia
-
19-09-2019 - |
Pregunta
Estoy tratando de obtener información acerca de un dispositivo Windows Mobile desde una aplicación de escritorio (escrito en C #). He buscado en la MSDN y se encontró que la función que necesito está en rapi.dll:
VOID CeGetSystemInfo (LPSYSTEM_INFO lpSystemInfo);
El parámetro es un puntero a una estructura que está definiéndose la siguiente:
typedef struct _SYSTEM_INFO {
union {
DWORD dwOemId;
struct {
WORD wProcessorArchitecture;
WORD wReserved;
};
};
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
} SYSTEM_INFO, *LPSYSTEM_INFO;
Aquí es cómo Me asignan a todo el código administrado:
[DllImport("rapi.dll")]
public static extern void CeGetSystemInfo([MarshalAs(UnmanagedType.Struct)]ref SYSTEM_INFO info);
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_INFO
{
internal PROCESSOR_INFO_UNION uProcessorInfo;
public uint dwPageSize;
public IntPtr lpMinimumApplicationAddress;
public IntPtr lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public ushort wProcessorLevel;
public ushort wProcessorRevision;
}
[StructLayout(LayoutKind.Explicit)]
public struct PROCESSOR_INFO_UNION
{
[FieldOffset(0)]
internal uint dwOemId;
[FieldOffset(1)]
internal ushort wProcessorArchitecture;
[FieldOffset(2)]
internal ushort wReserved;
}
Cuando llamo a la función de pasar el SYSTEM_INFO estructura no pasa nada. La función no altera los valores de la estructura de ninguna manera. Tengo Me asignan la estructura equivocada o algo?
Gracias de antemano
Solución
Lo tengo!
El rapi.dll necesita ser inicializado llamando a la función CeRapiInit y luego, después de todo su función de llamadas que usted necesita para cerrar la rapi llamando CeRapiUinit