Lecture d'informations WMI en C++ avec DEVC++.
A voir:
- plantage avec certains Firewall (Zone alarme)
- gérer les format DATE et chaînés
Infos:
Compilé en C++
la lib "wbemuuid" est inclue ainsi que les fihcier WMI
dans le répertoire de l'application.
Perfs:
effectuer la même chose avec un script vbs va plus vite :(
utilisation pour exemple de : WMICodeCreator.exe
Résultats : sous forme de fichier html (redirection avec la fichier .bat)
Pensez à renommer le fichier "WMI_READ_TEST.ex" en "WMI_READ_TEST.exe" et exécuter le fichier "bat.txt.bat", le résultat s'affiche dans le fichier "res.html"
Source / Exemple :
//------------------------------------------------------------------------------
// Projet WMI_READ_TEST : Lecture d'informations WMI avec DEVC++
// Auteur : Hanteville Nicolas
// Fichier : main.c
// Version : 0.1
// Date de modification : 12/09/2008
// Site : http:\\omni.a.free.fr
//------------------------------------------------------------------------------
/*
A voir:
- plantage avec certains Firewall (Zone alarme)
- gérer les format DATE et chaînés
Infos:
Compilé en C++
la lib "wbemuuid" est inclue ainsi que les fihcier WMI
dans le répertoire de l'application.
Perfs:
effectuer la même chose avec un script vbs va plus vite :(
utilisation pour exemple de : WMICodeCreator.exe
//------------------------------------------------------------------------------
#include <stdio.h>
#define _WIN32_DCOM
#include "WbemCli.h"
#include "wbemprov.h"
#include "wbemtran.h"
#include <objbase.h>
/*
-lole32
WbemUuid.Lib
-loleaut32
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")
#pragma comment(lib, "wbemuuid.lib")
//******************************************************************************
//exemple WMI
//
http://msdn.microsoft.com/en-us/library/aa394558(VS.85).aspx
//
http://msdn.microsoft.com/en-us/library/aa394554(VS.85).aspx
//classes WMI
//
http://msdn.microsoft.com/en-us/library/aa394084(VS.85).aspx
//
http://msdn.microsoft.com/en-us/library/aa394585(VS.85).aspx
//
http://msdn.microsoft.com/en-us/library/aa390423.aspx
//
http://msdn.microsoft.com/en-us/library/aa286547.aspx
//******************************************************************************
int main()
{
//objet de connexion WMI
IWbemLocator *pLoc = NULL;
IWbemServices *pSvc = NULL;
ULONG uReturn = 0;
unsigned short nb=0;
//ajouter init standard comme pour snmpS
CoInitializeEx(0, COINIT_MULTITHREADED);
//
http://msdn.microsoft.com/en-us/library/ms693736(VS.85).aspx
if(CoInitializeSecurity( NULL,-1,NULL,NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,EOAC_NONE,NULL
) != S_OK)
{
printf("erreur - CoInitializeSecurity\n");
CoUninitialize();
return 0;
};
//init objet
if(FAILED(CoCreateInstance(CLSID_WbemLocator,NULL,CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &pLoc))
)
{
printf("erreur - CoCreateInstance\n");
pLoc->Release();
CoUninitialize();
return 0;
};
//connexion à la base
if(FAILED(pLoc->ConnectServer(
BSTR(L"ROOT\\CIMV2"), //emplacement
NULL, //login actuel
NULL, //mots de passe actuel
NULL, //langue
0, //securityFlags (par défaut)
0, //authorité (NTLM par défaiut)
0, //context
&pSvc))
)
{
printf("erreur - ConnectServer\n");
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 0;
}
// Set the IWbemServices proxy so that impersonation
// of the user (client) occurs.
if(FAILED(CoSetProxyBlanket(
pSvc, // the proxy to set
RPC_C_AUTHN_WINNT, // authentication service
RPC_C_AUTHZ_NONE, // authorization service
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // authentication level
RPC_C_IMP_LEVEL_IMPERSONATE, // impersonation level
NULL, // client identity
EOAC_NONE // proxy capabilities
)))
{
printf("erreur - CoSetProxyBlanket\n");
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 0;
}
//******************************************************************************
//liste des processus en cours
printf( "<html>\r\n"
"<center><BIG>WMI read - test</BIG>(http:\\omni.a.free.fr)</center>"
"[Index]<br/><br/>"
"<a href=\"#0\">Liste des processus</a><br/>"
"<a href=\"#1\">Utilisateurs et groupes</a><br/>"
"<a href=\"#2\">Utilisateurs locaux</a><br/>"
"<a href=\"#3\">Informations machine</a><br/>"
"<a href=\"#4\">Services</a><br/>"
"<a href=\"#5\">Logiciels</a><br/>"
"<a href=\"#6\">Mise à jour</a><br/>"
"<a href=\"#7\">Imprimantes</a><br/>"
"<a href=\"#8\">Partages réseaux</a><br/>"
"<a href=\"#9\">Gestionnaire de tâches</a><br/>"
"<a href=\"#10\">Routes</a><br/>"
"<a href=\"#11\">Journaux d'historiques</a><br/>"
"<a href=\"#12\">Antivirus</a><br/>"
"<a href=\"#13\">Firewall</a><br/><br/><hr/>"
"\t<a name=\"0\"></a><big>[Liste des processus:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
IEnumWbemClassObject* pEnumerator = NULL;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_Process"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Commande</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//nom
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//CommandLine
pclsObj->Get(L"CommandLine", 0, &vtProp, 0, 0);
printf("%S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//liste utilisateurs et groupes
printf("\r\n\t<br/><br/><a name=\"1\"></a><big>[Utilisateurs et groupes:]</big>\r\n");
pEnumerator = NULL;
uReturn = 0;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_Account"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//nom
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//SID
pclsObj->Get(L"SID", 0, &vtProp, 0, 0);
printf("SID: %S<br/>",vtProp.bstrVal);
//Description
pclsObj->Get(L"Description", 0, &vtProp, 0, 0);
printf("Description: %S<br/>",vtProp.bstrVal);
//Domain
pclsObj->Get(L"Domain", 0, &vtProp, 0, 0);
printf("Domain: %S<br/>",vtProp.bstrVal);
//Status
pclsObj->Get(L"Status", 0, &vtProp, 0, 0);
printf("Etat: %S<br/>",vtProp.bstrVal);
//LocalAccount
pclsObj->Get(L"LocalAccount", 0, &vtProp, 0, 0);
printf("LocalAccount: %S</td>\r\n\t\t</tr>\r\n",vtProp.boolVal?"OUI":"NON");
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//liste utilisateurs et groupes
printf("\r\n\t<br/><br/><a name=\"2\"></a><big>[Utilisateurs locaux:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_UserAccount"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//nom
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//FullName
pclsObj->Get(L"FullName", 0, &vtProp, 0, 0);
printf("FullName: %S<br/>",vtProp.bstrVal);
//SID
pclsObj->Get(L"SID", 0, &vtProp, 0, 0);
printf("SID: %S<br/>",vtProp.bstrVal);
//Caption
pclsObj->Get(L"Caption", 0, &vtProp, 0, 0);
printf("Caption: %S<br/>",vtProp.bstrVal);
//Status
pclsObj->Get(L"Status", 0, &vtProp, 0, 0);
printf("Status: %S<br/>",vtProp.bstrVal);
//Description
pclsObj->Get(L"Description", 0, &vtProp, 0, 0);
printf("Description: %S<br/>",vtProp.bstrVal);
//Domain
pclsObj->Get(L"Domain", 0, &vtProp, 0, 0);
printf("Domain: %S<br/>",vtProp.bstrVal);
//LocalAccount
pclsObj->Get(L"LocalAccount", 0, &vtProp, 0, 0);
printf("LocalAccount: %s<br/>",vtProp.boolVal?"OUI":"NON");
//Disabled
pclsObj->Get(L"Disabled", 0, &vtProp, 0, 0);
printf("Disabled: %s<br/>",vtProp.boolVal?"OUI":"NON");
//Lockout
pclsObj->Get(L"Lockout", 0, &vtProp, 0, 0);
printf("Lockout: %s<br/>",vtProp.boolVal?"OUI":"NON");
//PasswordChangeable
pclsObj->Get(L"PasswordChangeable", 0, &vtProp, 0, 0);
printf("PasswordChangeable: %s<br/>",vtProp.boolVal?"OUI":"NON");
//PasswordExpires
pclsObj->Get(L"PasswordExpires", 0, &vtProp, 0, 0);
printf("PasswordExpires: %s<br/>",vtProp.boolVal?"OUI":"NON");
//PasswordRequired
pclsObj->Get(L"PasswordRequired", 0, &vtProp, 0, 0);
printf("PasswordRequired: %s</td>\r\n\t\t</tr>\r\n",vtProp.boolVal?"OUI":"NON");
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//Information machine
printf("\r\n\t<br/><br/><a name=\"3\"></a><big>[Informations machine:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_ComputerSystem"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//Name
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//UserName
pclsObj->Get(L"UserName", 0, &vtProp, 0, 0);
printf("UserName: %S<br/>",vtProp.bstrVal);
//Workgroup
pclsObj->Get(L"Workgroup", 0, &vtProp, 0, 0);
printf("Workgroup: %S<br/>",vtProp.bstrVal);
//PrimaryOwnerContact
pclsObj->Get(L"PrimaryOwnerContact", 0, &vtProp, 0, 0);
printf("PrimaryOwnerContact: %S<br/>",vtProp.bstrVal);
//PrimaryOwnerName
pclsObj->Get(L"PrimaryOwnerName", 0, &vtProp, 0, 0);
printf("PrimaryOwnerName: %S<br/>",vtProp.bstrVal);
//Description
pclsObj->Get(L"Description", 0, &vtProp, 0, 0);
printf("Description: %S<br/>",vtProp.bstrVal);
//Manufacturer
pclsObj->Get(L"Manufacturer", 0, &vtProp, 0, 0);
printf("Manufacturer: %S<br/>",vtProp.bstrVal);
//Model
pclsObj->Get(L"Model", 0, &vtProp, 0, 0);
printf("Model: %S<br/>",vtProp.bstrVal);
//SystemType
pclsObj->Get(L"SystemType", 0, &vtProp, 0, 0);
printf("SystemType: %S<br/>",vtProp.bstrVal);
//AutomaticManagedPagefile
pclsObj->Get(L"AutomaticManagedPagefile", 0, &vtProp, 0, 0);
printf("AutomaticManagedPagefile: %s<br/>",vtProp.boolVal?"OUI":"NON");
//AutomaticResetBootOption
pclsObj->Get(L"AutomaticResetBootOption", 0, &vtProp, 0, 0);
printf("AutomaticResetBootOption: %s<br/>",vtProp.boolVal?"OUI":"NON");
//AutomaticResetCapability
pclsObj->Get(L"AutomaticResetCapability", 0, &vtProp, 0, 0);
printf("AutomaticResetCapability: %s<br/>",vtProp.boolVal?"OUI":"NON");
//InfraredSupported
pclsObj->Get(L"InfraredSupported", 0, &vtProp, 0, 0);
printf("InfraredSupported: %s<br/>",vtProp.boolVal?"OUI":"NON");
//NetworkServerModeEnabled
pclsObj->Get(L"NetworkServerModeEnabled", 0, &vtProp, 0, 0);
printf("NetworkServerModeEnabled: %s<br/>",vtProp.boolVal?"OUI":"NON");
//PartOfDomain
pclsObj->Get(L"PartOfDomain", 0, &vtProp, 0, 0);
printf("PartOfDomain: %s<br/>",vtProp.boolVal?"OUI":"NON");
//NumberOfProcessors
pclsObj->Get(L"NumberOfProcessors", 0, &vtProp, 0, 0);
printf("NumberOfProcessors: %d</td>\r\n\t\t</tr>\r\n",vtProp.iVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
}
//---------------------------------------------------------------
//Information machine 2
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_OperatingSystem"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//Caption
pclsObj->Get(L"Caption", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//Version
pclsObj->Get(L"Version", 0, &vtProp, 0, 0);
printf("Version: %S<br/>",vtProp.bstrVal);
//CSDVersion
pclsObj->Get(L"CSDVersion", 0, &vtProp, 0, 0);
printf("CSDVersion: %S<br/>",vtProp.bstrVal);
//Organization
pclsObj->Get(L"Organization", 0, &vtProp, 0, 0);
printf("Organization: %S<br/>",vtProp.bstrVal);
//SystemDevice
pclsObj->Get(L"SystemDevice", 0, &vtProp, 0, 0);
printf("SystemDevice: %S<br/>",vtProp.bstrVal);
//SystemDrive
pclsObj->Get(L"SystemDrive", 0, &vtProp, 0, 0);
printf("SystemDrive: %S<br/>",vtProp.bstrVal);
//SystemDirectory
pclsObj->Get(L"SystemDirectory", 0, &vtProp, 0, 0);
printf("SystemDirectory: %S<br/>",vtProp.bstrVal);
//WindowsDirectory
pclsObj->Get(L"WindowsDirectory", 0, &vtProp, 0, 0);
printf("WindowsDirectory: %S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//services
printf("\r\n\t<br/><br/><a name=\"4\"></a><big>[Services:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_Service"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//Caption
pclsObj->Get(L"Caption", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//Description
pclsObj->Get(L"Description", 0, &vtProp, 0, 0);
printf("Description: %S<br/>",vtProp.bstrVal);
//PathName
pclsObj->Get(L"PathName", 0, &vtProp, 0, 0);
printf("PathName: %S<br/>",vtProp.bstrVal);
//Name
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("Name: %S<br/>",vtProp.bstrVal);
//ServiceType
pclsObj->Get(L"ServiceType", 0, &vtProp, 0, 0);
printf("ServiceType: %S<br/>",vtProp.bstrVal);
//StartMode
pclsObj->Get(L"StartMode", 0, &vtProp, 0, 0);
printf("StartMode: %S<br/>",vtProp.bstrVal);
//StartName
pclsObj->Get(L"StartName", 0, &vtProp, 0, 0);
printf("StartName: %S<br/>",vtProp.bstrVal);
//State
pclsObj->Get(L"State", 0, &vtProp, 0, 0);
printf("State: %S<br/>",vtProp.bstrVal);
//Started
pclsObj->Get(L"Started", 0, &vtProp, 0, 0);
printf("Started: %s</td>\r\n\t\t</tr>\r\n",vtProp.boolVal?"OUI":"NON");
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//logiciels
printf("\r\n\t<br/><br/><a name=\"5\"></a><big>[Logiciels:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_Product"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//Name
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//Version
pclsObj->Get(L"Version", 0, &vtProp, 0, 0);
printf("Version: %S<br/>",vtProp.bstrVal);
//InstallDate
pclsObj->Get(L"InstallDate", 0, &vtProp, 0, 0);
printf("InstallDate: %S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//Mise à jour
printf("\r\n\t<br/><br/><a name=\"6\"></a><big>[Mise à jour:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_QuickFixEngineering"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
pclsObj->Get(L"Description", 0, &vtProp, 0, 0);
char tmp[MAX_PATH]="";
sprintf(tmp,"%S",vtProp.bstrVal);
if (strlen(tmp))
{
//Name
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//Name
pclsObj->Get(L"HotFixID", 0, &vtProp, 0, 0);
printf("HotFixID: %S<br/>",vtProp.bstrVal);
//Version
pclsObj->Get(L"Description", 0, &vtProp, 0, 0);
printf("Description: %S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
}
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
/*
datetime InstallDate;
}
//---------------------------------------------------------------
//Imprimantes
printf("\r\n\t<br/><br/><a name=\"7\"></a><big>[Imprimantes:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_Printer"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//Name
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//Comment
pclsObj->Get(L"Comment", 0, &vtProp, 0, 0);
printf("Comment: %S<br/>",vtProp.bstrVal);
//Parameters
pclsObj->Get(L"Parameters", 0, &vtProp, 0, 0);
printf("Parameters: %S<br/>",vtProp.bstrVal);
//ServerName
pclsObj->Get(L"ServerName", 0, &vtProp, 0, 0);
printf("ServerName: %S<br/>",vtProp.bstrVal);
//ShareName
pclsObj->Get(L"ShareName", 0, &vtProp, 0, 0);
printf("ShareName: %S<br/>",vtProp.bstrVal);
//SystemName
pclsObj->Get(L"SystemName", 0, &vtProp, 0, 0);
printf("SystemName: %S<br/>",vtProp.bstrVal);
//Version
pclsObj->Get(L"Description", 0, &vtProp, 0, 0);
printf("Description: %S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//partages réseaux
printf("\r\n\t<br/><br/><a name=\"8\"></a><big>[Partages réseaux:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_Share"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td><td><font color=\"FFFFFF\">Chemin</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//Caption
pclsObj->Get(L"Caption", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//Name
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("<td>%S</td><td>",vtProp.bstrVal);
//Path
pclsObj->Get(L"Path", 0, &vtProp, 0, 0);
printf("%S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//gestionnaire de tâche
printf("\r\n\t<br/><br/><a name=\"9\"></a><big>[Gestionnaire de tâches:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_ScheduledJob"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//Caption
pclsObj->Get(L"Caption", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//Command
pclsObj->Get(L"Command", 0, &vtProp, 0, 0);
printf("Command: %S<br/>",vtProp.bstrVal);
//Description
pclsObj->Get(L"Description", 0, &vtProp, 0, 0);
printf("Description: %S<br/>",vtProp.bstrVal);
//JobStatus
pclsObj->Get(L"JobStatus", 0, &vtProp, 0, 0);
printf("JobStatus: %S<br/>",vtProp.bstrVal);
//Name
pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
printf("Name: %S<br/>",vtProp.bstrVal);
//Notify
pclsObj->Get(L"Notify", 0, &vtProp, 0, 0);
printf("Notify: %S<br/>",vtProp.bstrVal);
//Owner
pclsObj->Get(L"Owner", 0, &vtProp, 0, 0);
printf("Owner: %S<br/>",vtProp.bstrVal);
//Status
pclsObj->Get(L"Status", 0, &vtProp, 0, 0);
printf("Status: %S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//Route réseaux
printf("\r\n\t<br/><br/><a name=\"10\"></a><big>[Routes:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_IP4RouteTable"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Description</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//Description
pclsObj->Get(L"Description", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td></tr>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
//log
printf("\r\n\t<br/><br/><a name=\"11\"></a><big>[Journaux d'historiques:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
pEnumerator = NULL;
nb=0;
if (FAILED(pSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM Win32_NTLogEvent"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//Logfile
pclsObj->Get(L"Logfile", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//Message
pclsObj->Get(L"Message", 0, &vtProp, 0, 0);
printf("Message: %S<br/>",vtProp.bstrVal);
//SourceName
pclsObj->Get(L"SourceName", 0, &vtProp, 0, 0);
printf("SourceName: %S<br/>",vtProp.bstrVal);
//Type
pclsObj->Get(L"Type", 0, &vtProp, 0, 0);
printf("Type: %S<br/>",vtProp.bstrVal);
//User
pclsObj->Get(L"User", 0, &vtProp, 0, 0);
printf("User: %S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
//---------------------------------------------------------------
pSvc->Release();
//----------------------------------------------------------------------------
//centre de sécurité
pLoc->Release();
CoUninitialize();
CoInitializeEx(0, COINIT_MULTITHREADED);
pEnumerator = NULL;
nb=0;
//
http://msdn.microsoft.com/en-us/library/ms693736(VS.85).aspx
if(CoInitializeSecurity( NULL,-1,NULL,NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,//RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE,//RPC_C_IMP_LEVEL_DEFAULT,//RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,EOAC_NONE,NULL
) != S_OK) printf("erreur - CoInitializeSecurity\n");
//objet de connexion WMI
IWbemLocator *mpLoc = NULL;
IWbemServices *mpSvc = NULL;
//init objet
if(FAILED(CoCreateInstance(CLSID_WbemLocator,NULL,CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &mpLoc))
) printf("erreur - CoCreateInstance\n");
//connexion à la base
if(FAILED(mpLoc->ConnectServer(
BSTR(L"ROOT\\SecurityCenter"), //emplacement
NULL, //login actuel
NULL, //mots de passe actuel
0, //local
0, //securityFlags
0, //authorité (NTLM domain)
0, //context
&mpSvc))
)printf("erreur - ConnectServer SecurityCenter\n");
// Set the IWbemServices proxy so that impersonation
// of the user (client) occurs.
if(FAILED(CoSetProxyBlanket(
mpSvc, // the proxy to set
RPC_C_AUTHN_WINNT, // authentication service
RPC_C_AUTHZ_NONE, // authorization service
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // authentication level
RPC_C_IMP_LEVEL_IMPERSONATE, // impersonation level
NULL, // client identity
EOAC_NONE // proxy capabilities
)))printf("erreur - CoSetProxyBlanket SecurityCenter\n");
printf("\r\n\t<br/><br/><a name=\"12\"></a><big>[Antivirus:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
if (FAILED(mpSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM AntiVirusProduct"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery AntiVirusProduct\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//displayName
pclsObj->Get(L"DisplayName", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//companyName
pclsObj->Get(L"CompanyName", 0, &vtProp, 0, 0);
printf("CompanyName: %S<br/>\r\n",vtProp.bstrVal);
//OnAccessScanningEnabled
pclsObj->Get(L"OnAccessScanningEnabled", 0, &vtProp, 0, 0);
printf("OnAccessScanningEnabled: %d<br/>\r\n",vtProp.boolVal?"OUI":"NON");
//productUptoDate
pclsObj->Get(L"productUptoDate", 0, &vtProp, 0, 0);
printf("productUptoDate: %S<br/>\r\n",vtProp.bstrVal);
//versionNumber
pclsObj->Get(L"VersionNumber", 0, &vtProp, 0, 0);
printf("VersionNumber: %S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
printf("\r\n\t<br/><br/><a name=\"13\"></a><big>[Firewall:]</big>\r\n");
// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:
// For example, query for all the running processes
if (FAILED(mpSvc->ExecQuery(
BSTR(L"WQL"),
BSTR(L"SELECT * FROM FirewallProduct"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator)))printf("erreur - ExecQuery FirewallProduct\n");
else
{
printf("\t<table border=\"1px\">\r\n");
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
printf("\t\t<tr bgcolor=\"gray\">\r\n\t\t\t<td><font color=\"FFFFFF\">Nom</font></td><td><font color=\"FFFFFF\">Infos</font></td>\r\n\t\t</tr>\r\n");
while (pEnumerator)
{
pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);
if(0 == uReturn)break;
VARIANT vtProp;
//displayName
pclsObj->Get(L"DisplayName", 0, &vtProp, 0, 0);
printf("\t\t<tr%s>\r\n\t\t\t<td>%S</td><td>",nb++%2==1?" bgcolor=\"silver\"":"",vtProp.bstrVal);
//companyName
pclsObj->Get(L"CompanyName", 0, &vtProp, 0, 0);
printf("CompanyName: %S<br/>\r\n",vtProp.bstrVal);
//enabled
pclsObj->Get(L"Enabled", 0, &vtProp, 0, 0);
printf("Enabled: %d<br/>\r\n",vtProp.boolVal?"OUI":"NON");
//versionNumber
pclsObj->Get(L"VersionNumber", 0, &vtProp, 0, 0);
printf("VersionNumber: %S</td>\r\n\t\t</tr>\r\n",vtProp.bstrVal);
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
printf("\t</table>\r\n");
}
printf("\r\n</html>\r\n");
mpSvc->Release();
mpLoc->Release();
CoUninitialize();
// system("PAUSE");
return 0;
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.