Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    13

    [C] Problema con CreateProcessWithLogonW

    Rieccomi con un problema con le API di Winzozz... vorrei eseguire un programma come altro utente da quello attualmente loggato (l'equivalente di cliccare col tasto destro sull'eseguibile e andare su Esegui come...); per far questo ho cercato un po' sulla rete e ho trovato la funzione CreateProcessWithLogonW che mi sembra quella più adatta. Ecco il codice:
    #define _WIN32_WINNT NTDDI_WIN2K
    #define UNICODE

    #include <stdio.h>
    #include <stdlib.h>
    #include <Windows.h>
    #include <winbase.h>
    #include <userenv.h>

    int main(int argc, char *argv[])
    {
    PROCESS_INFORMATION pi = {0};
    STARTUPINFO si = {0};
    si.cb = sizeof(STARTUPINFO);
    CreateProcessWithLogonW("paolo", ".", "password", 0, "install.exe", NULL, 0x04000210, NULL, NULL, &si, &pi);
    return 0;
    }
    Innanzitutto non sono sicuro di aver inserito correttamente i parametri della funzione; io vorrei semplicemente che venga eseguito install.exe con i privilegi di paolo, senza caricare le informazioni dell'utente da HKEY_USERS (come ho detto prima, come se facessi click su Esegui come...). Il problema però è un altro: quando compilo, Dev-C++ mi dà un errore "[Linker error] undefined reference to `CreateProcessWithLogonW' ", come se non avessi incluso l'header della libreria giusto. Qualcuno sa dirmi dove potrebbe essere l'errore?

    KB su CreateProcessWithLogonW

  2. #2
    Un errore di linker non deriva dal non aver incluso un file, ma dal non aver dato in pasto al linker una libreria di importazione. Devi dire al linker di linkare con i tuoi moduli oggetto anche Advapi32.lib (come peraltro dice anche la pagina che hai linkato in fondo).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    13
    Probabilmente ho sbagliato a mettere l'impostazione (sono andato su Progetto, Opzioni del progetto e sotto Parametri, Linker ho aggiunto Advapi32.lib) però non mi cambia nulla...boh riproverò domani con più calma...grazie mille comunque per l'aiuto!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Il Dev-C++ usa il MinGW e le librerie sono diverse per formato e nome del file rispetto a quelle Microsoft. La libreria è: libadvapi32.a

    E nota .. ammesso che la funzione CreateProcessWithLogonW sia presente negli header/librerie del Dev-C++ ... ho verificato adesso sulla versione 4.9.x e sembra che non c'è.

    Io personalmente consiglio sempre di usare Visual C++ (anche la Express) e di usare il Dev-C++ solo per farci giocare il proprio gatto/cane.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da andbin
    Io personalmente consiglio sempre di usare Visual C++ (anche la Express) e di usare il Dev-C++ solo per farci giocare il proprio gatto/cane.


    Comunque .... prova a scrivere

    codice:
    #define UNICODE
    #define _WIN32_WINNT 0x0500
    
    #include <windows.h>
    
    int main()
    {
      PROCESS_INFORMATION pi = {0};
      STARTUPINFO si = {0};
      si.cb = sizeof(STARTUPINFO);
      CreateProcessWithLogonW(L"paolo", L".", L"password", 0, L"install.exe", NULL, 0x04000210, NULL, NULL, &si, &pi);
    
      return 0;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    13
    Il Dev-C++ usa il MinGW e le librerie sono diverse per formato e nome del file rispetto a quelle Microsoft. La libreria è: libadvapi32.a

    E nota .. ammesso che la funzione CreateProcessWithLogonW sia presente negli header/librerie del Dev-C++ ... ho verificato adesso sulla versione 4.9.x e sembra che non c'è.

    Io personalmente consiglio sempre di usare Visual C++ (anche la Express) e di usare il Dev-C++ solo per farci giocare il proprio gatto/cane.
    Sì Visual C++ Express l'avevo scaricato ma alla fine avevo sempre usato Dev-C++ (non chiedetemi il perchè); in effetti è bastato cambiare compilatore, includere la libreria (ottenuta attraverso la Windows SDK) direttamente nel progetto e finalmente il linker ha ricominciato a tacere.

    #define UNICODE
    #define _WIN32_WINNT 0x0500

    #include <windows.h>

    int main()
    {
    PROCESS_INFORMATION pi = {0};
    STARTUPINFO si = {0};
    si.cb = sizeof(STARTUPINFO);
    CreateProcessWithLogonW(L"paolo", L".", L"password", 0, L"install.exe", NULL, 0x04000210, NULL, NULL, &si, &pi);

    return 0;
    }
    Oregon, per caso riesci anche a scrivere software per penetrare nella mente altrui da remoto?? Appena mi ha riconosciuto la funzione mi dava errore perchè non convertiva implicitamente le stringhe in WCHAR, stavo per scrivere un altro messaggio per chiedere come fare ed ecco che mi avevi già risposto e ora finalmente funziona...grazie a tutti!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.