Problème pour écrire dans le registre Windows

wetzzer Messages postés 1 Date d'inscription dimanche 14 mai 2017 Statut Membre Dernière intervention 14 mai 2017 - Modifié le 16 mai 2017 à 18:19
lyndalinad Messages postés 1 Date d'inscription vendredi 7 juillet 2017 Statut Membre Dernière intervention 1 août 2017 - 1 août 2017 à 00:12
Bonjour,

J'ai des soucis avec les deux fonctions en bas de mon code qui s'appliquent dans le registre. Lorsque je compile mon code, cela ne marche pas. Devrais-je travailler avec les droits d'admin ? Je vous avoue que je ne sais plus quoi faire...

 #include <windows.h>
//#include <winreg.h>//contient windows.h et est indispensable pour setvalue
#include <stdio.h>
#include "math.h"


HINSTANCE instance;
 
//usb début
 
char szClassName[ ] = "WindowsApp";
 
 
// structure générique
struct DEV_BROADCAST_HDR
    int dbch_size;
int dbch_devicetype;
int dbch_reserved;
};
 
 
struct DEV_BROADCAST_VOLUME
{
    int dbcv_size;
    int dbcv_devicetype;
    int dbcv_reserved;
    int dbcv_unitmask;
    short dbcv_flags;
};
//usb fin
LRESULT CALLBACK
 
procedureFenetrePrincipale(HWND,
                           UINT,
                           WPARAM,
                           LPARAM);
 
BOOL APIENTRY /*/fonction callback avec un type de retour different/*/aPropos_procedure(HWND hDlg,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam);
 
 
 
int WinMain (HINSTANCE cetteInstance, HINSTANCE precedenteInstance,
 
             LPSTR lignesDeCommande, int modeDAffichage)
 
 
 
{
 
    HWND fenetrePrincipale;
 
 
    MSG message;
 
    WNDCLASS classeFenetre;
 
    instance = cetteInstance;
 
 
    classeFenetre.style = 0;
 
    classeFenetre.lpfnWndProc = procedureFenetrePrincipale;
 
    classeFenetre.cbClsExtra = 0;
 
    classeFenetre.cbWndExtra = 0;
 
    classeFenetre.hInstance = NULL;
 
    classeFenetre.hIcon = LoadIcon(NULL, "C:/Users/Nico/Desktop/SmartDef/1490533751_twitter.ico");
 
    classeFenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
 
    classeFenetre.hbrBackground = (HBRUSH)(1 + COLOR_ACTIVEBORDER);
 
    classeFenetre.lpszMenuName = NULL;
 
    classeFenetre.lpszClassName = "classeF";
 
 
 
    if(!RegisterClass(&classeFenetre)) return FALSE; //
 
    fenetrePrincipale = CreateWindow("classeF", "SmartDef",WS_OVERLAPPEDWINDOW,
                                     CW_USEDEFAULT,
                                     CW_USEDEFAULT, 1000, 700,
                                     NULL, LoadMenu(instance, "ID_MENU"),
                                     cetteInstance, NULL);
    if (!fenetrePrincipale) return FALSE;
 
    //ShowWindow(fenetrePrincipale, SW_SHOW); // afficher la fenetrePrincipale
 
    UpdateWindow(fenetrePrincipale);
 
 
    while (GetMessage(&message, NULL, 0, 0))
 
    {
 
        TranslateMessage(&message);
 
        DispatchMessage(&message);
 
    }
    return message.wParam;
 
}
 
 
 
 
 

 
 
 
 
LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
 
{
    //détection USB
    switch (message)
    {
 
    case WM_DEVICECHANGE:
    {
        if (wParam == DBT_DEVICEARRIVAL)//si arrivé usb
        {
 
            MessageBox(fenetrePrincipale, "Nouveau peripherique, SmartDefense prend le relais",
                       "SmartDef", MB_ICONINFORMATION);
        }
        break;
    }
 
 
 
 
    case WM_DESTROY:// envoyer à la destruction de la fenètre
    {
        PostQuitMessage (0);
        break;
    }
 
 
    default:                      // for messages that we don't deal with
        return DefWindowProc (fenetrePrincipale, message, wParam, lParam);
    }
 
    return 0;
 
}





//démarage avec windows

void addToStartup(const char *path = "C:/Users/Nicolas/Desktop/SmartDef/bin/Release/SmartDef.exe",
                  const char *name = "SmartDef.exe", bool state = true)

{

    HKEY key;

    if(state)
    {
        MessageBox(NULL, "lancement addtostartup", "SmartDef", MB_ICONINFORMATION);



        if( RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0,
                         KEY_ALL_ACCESS, &key)== ERROR_SUCCESS )
        {
            MessageBox(NULL, "impossible d'ouvrir la clef run", "SmartDef", MB_ICONINFORMATION);
        }
        else
        {
            if( RegSetValueEx(key, name, 0, REG_SZ, (BYTE*)path, strlen(path)+1)  != ERROR_SUCCESS )
            {
                MessageBox(NULL, "impossible de définir une nouvelle valeur", "SmartDef", MB_ICONINFORMATION);
            }
            else
            {
                RegCloseKey(key);
            }
        }
    }
    else
    {
        RegCloseKey(key);
        MessageBox(NULL, "echec addtostartup", "SmartDef", MB_ICONINFORMATION);
    }

    return;

}




//les clefs usb ne peuvent pas faire office de clavier
void ecritDef (bool stat = true,  const char *nom = "writeProtect")

{

    HKEY key;

    if (stat)
    {
        MessageBox(NULL, "lancement ecritdef", "SmartDef", MB_ICONINFORMATION);

        if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies",
                         0, KEY_WRITE, &key) != ERROR_SUCCESS )
        {

            if( RegCreateKeyEx (HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies"),
                                0, REG_OPTION_NON_VOLATILE, 0, KEY_ALL_ACCESS, 0, &key,NULL)!= ERROR_SUCCESS )
            {
                MessageBox(NULL, "impossible de créer la celf StorageDevicePolicies", "SmartDef", MB_ICONINFORMATION);
            }
            else
            {
                const int valeur = 1;
                if( RegSetValueEx(key, TEXT(nom), 0, REG_DWORD, (LPBYTE)&valeur, (DWORD)sizeof(valeur)) !=ERROR_SUCCESS )
                {
                    MessageBox(NULL, "impossible de créer une valeur dans la clef StorageDevicePolicies",
                               "SmartDef", MB_ICONINFORMATION);

                }
                else
                {
                    RegCloseKey(key);
                }
            }
        }
        else
        {
            RegCloseKey(key);
        }

    }

    else
    {
        RegCloseKey(key);
        MessageBox(NULL, "echec écritdef", "SmartDef", MB_ICONINFORMATION);
    }


    return;
}

1 réponse

lyndalinad Messages postés 1 Date d'inscription vendredi 7 juillet 2017 Statut Membre Dernière intervention 1 août 2017
Modifié le 1 août 2017 à 00:19
peut être vous n'avez pas fait l'appel de deux fonctions dans ce cas vous aurez des problèmes après c'est à dire le programme n’exécute pas
0
Rejoignez-nous