Generowanie klucza PID dla systemu Windows 7

dział ogólny

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez polymorphism » czwartek, 15 lipca 2010, 09:05

Jak to nie działa? Załączyłeś windows.h?

Zakładam, że kolejność definicji struktur i wskaźnika jest dokładnie taka, jak podałem.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez janek2012 » czwartek, 15 lipca 2010, 15:10

no tak, zapomniałem o struktorach :P
Ale tutaj jest kolejny problem - kompilator mówi że funkcja main jest źle zadeklarowana - niezależnie jak ustawię deklaracje struktur oraz wskaźnika:
Kod: Zaznacz cały
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------

#pragma argsused
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <winbase.h>
#include <wingdi.h>
using namespace std;


struct genPid_t
{
    DWORD    cbSize;
    WCHAR    productId[48];
};

struct digPid_t
{
    DWORD    cbSize;
    DWORD    dwUnknown1;
    CHAR    productID[28];
    CHAR    editionID[16];
    BYTE    bUnknown2[112];
};

struct digPid4_t
{
    DWORD    cbSize;
    DWORD    unknown;
    WCHAR    extendedPID[64];
    WCHAR    activationID[72];
    WCHAR    editionID[304];
    WCHAR    subType[64];
    WCHAR    licenseType[49];
    WCHAR    licenseChannel[79];
};

typedef HRESULT (WINAPI *importFunction)(LPCWSTR,LPCWSTR,LPCWSTR,LPVOID,genPid_t*,digPid_t*,digPid4_t*);
 
int _tmain
(int argc, _TCHAR* argv[])
{

    WSTR Key = "";
    importFunction GeneratePID;

    int result;

    // Load DLL file
    HINSTANCE hinstLib = LoadLibrary(TEXT("pidgenx.dll"));
    if (hinstLib == NULL) {
        printf("ERROR: unable to load DLL\n");
        return 1;
    }

    // Get function pointer
    GeneratePID = (importFunction)GetProcAddress(hinstLib, "PidGenX");
    if (GeneratePID == NULL) {
        printf("ERROR: unable to find DLL function\n");
        FreeLibrary(hinstLib);
        return 1;
    }

    // Call function.

    // Unload DLL file
    FreeLibrary(hinstLib);

    // Display result

    return 0;
    system("pause");
}
//---------------------------------------------------------------------------  
Avatar użytkownika
janek2012
Bladawiec
Bladawiec
 
Posty: 30
Dołączył(a): poniedziałek, 12 lipca 2010, 22:56
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows 8 x64
Kompilator: C++ Builder XEe
SKYPE: janek2012
Gadu Gadu: 1489603
    Windows 7Opera

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez polymorphism » czwartek, 15 lipca 2010, 15:16

(...) kompilator mówi że funkcja main jest źle zadeklarowana

A skąd tę funkcję main wytrzasnąłeś? Jeśli piszesz w BCB, to nie możesz ot tak dowolnie tworzyć funkcji main, bo od tego jest środowisko, które stworzy Ci odpowiednią wersję tej funkcji podczas tworzenia nowego projektu.

Kod: Zaznacz cały
   return 0;
    system("pause");
}
 

No proszę Cię... :roll:
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez janek2012 » czwartek, 15 lipca 2010, 15:35

polymorphism napisał(a):A skąd tę funkcję main wytrzasnąłeś? Jeśli piszesz w BCB, to nie możesz ot tak dowolnie tworzyć funkcji main, bo od tego jest środowisko, które stworzy Ci odpowiednią wersję tej funkcji podczas tworzenia nowego projektu [...]


Funkcja main właśnie tak wygląda w BCB :)
Co do tego return'a to i tak przerobię potem na aplikację GUI - piszę jako konsolową żeby tylko sprawdzić działanie :P

Problem rozwiazany: przed main'em trzeba było dodać "#pragma argsused".

teraz pytanie:
Kod: Zaznacz cały
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------

#pragma argsused
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <winbase.h>
#include <wingdi.h>
using namespace std;


struct genPid_t
{
    DWORD    cbSize;
    WCHAR    productId[48];
};

struct digPid_t
{
    DWORD    cbSize;
    DWORD    dwUnknown1;
    CHAR    productID[28];
    CHAR    editionID[16];
    BYTE    bUnknown2[112];
};

struct digPid4_t
{
    DWORD    cbSize;
    DWORD    unknown;
    WCHAR    extendedPID[64];
    WCHAR    activationID[72];
    WCHAR    editionID[304];
    WCHAR    subType[64];
    WCHAR    licenseType[49];
    WCHAR    licenseChannel[79];
};

typedef HRESULT (WINAPI *importFunction)(LPCWSTR,LPCWSTR,LPCWSTR,LPVOID,genPid_t*,digPid_t*,digPid4_t*);
#pragma argsused 
int _tmain(int argc, _TCHAR* argv[])
{

    String Key = "22TKD-F8XX6-YG69F-9M66D-PMJBM";
    importFunction GeneratePID;

    int result;

    // Load DLL file
    HINSTANCE hinstLib = LoadLibrary(TEXT("pidgenx.dll"));
    if (hinstLib == NULL) {
        printf("ERROR: unable to load DLL\n");
        return 1;
    }

    // Get function pointer
    GeneratePID = (importFunction)GetProcAddress(hinstLib, "PidGenX");
    if (GeneratePID == NULL) {
        printf("ERROR: unable to find DLL function\n");
        FreeLibrary(hinstLib);
        return 1;
    }

    // Call function.
    GeneratePID(Key, "pkeyconfig.xrm-ms", "XXXX", 0, genPid_t*, digPid_t*, digPid4_t*);
    // Unload DLL file
    FreeLibrary(hinstLib);

    // Display result
    system("pause");
    return 0;

}
//---------------------------------------------------------------------------  


Mówi mi, że źle używam "genPid_t*" przywywołaniu funkcji - to samo miałem przy kodzie, który jest w pierwszym poście :(
Avatar użytkownika
janek2012
Bladawiec
Bladawiec
 
Posty: 30
Dołączył(a): poniedziałek, 12 lipca 2010, 22:56
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows 8 x64
Kompilator: C++ Builder XEe
SKYPE: janek2012
Gadu Gadu: 1489603
    Windows 7Opera

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez polymorphism » czwartek, 15 lipca 2010, 16:39

Co do tego return'a to i tak przerobię potem na aplikację GUI - piszę jako konsolową żeby tylko sprawdzić działanie

A co tu GUI ma do rzeczy? Wywołanie system po returnie jest bez sensu.

Mówi mi, że źle używam "genPid_t*" przywywołaniu funkcji

Zajrzyj sobie do jakiegoś kursu C/C++, choć książka byłaby lepsza, i zobacz, co to są zmienne i jak się ich używa. Pytasz o podstawy podstaw, a ja na takie pytania mam alergię. Nic na to nie poradzę...

____
p.s. nie cytuj całych postów, bo to nie ma sensu i niepotrzebnie bazę zapycha.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez Cyfrowy Baron » czwartek, 15 lipca 2010, 17:54

Problem rozwiazany: przed main'em trzeba było dodać "#pragma argsused".


Ten wpis miałeś już wcześniej, teraz masz dwa, po co?

► 




Mówi mi, że źle używam "genPid_t*" przywywołaniu funkcji - to samo miałem przy kodzie, który jest w pierwszym poście :(


Chyba nic lub niewiele wiesz o strukturach. genPid_t jest tylko deklaracją struktury, potrzeba jeszcze definicji.

Kod: Zaznacz cały

int _tmain
(int argc_TCHARargv[])
{
  
// definicje struktur:
  
genPid_t  *structgP;
  
digPid_t  *structdP;
  
digPid4_t *structdP4;

/* ... */

GeneratePID(Key.w_str(), L"pkeyconfig.xrm-ms"L"XXXX"0structgPstructdPstructdP4);

 


Poczytaj o strukturach zanim weźmiesz się znów za ten program.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez janek2012 » czwartek, 15 lipca 2010, 20:28

Bardzo przepraszam za moją niewiedzę - przeczytałem artykuł Barona o strukturach i już mniej więcej wiem o co kaman.

A więc:

Kod: Zaznacz cały
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------


#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <winbase.h>
#include <wingdi.h>
using namespace std;

struct genPid_t
{
    unsigned int cbSize;
    WCHAR    productId[48];
};

struct digPid_t
{
    unsigned int cbSize;
    BYTE    dwUnknown1[4];
    CHAR    productID[28];
    CHAR    editionID[16];
    BYTE    bUnknown2[112];
};

struct digPid4_t
{
    unsigned int cbSize;
    BYTE    unknown[4];
    WCHAR    extendedPID[64];
    WCHAR    activationID[72];
    WCHAR    editionID[304];
    WCHAR    subType[64];
    WCHAR    licenseType[49];
    WCHAR    licenseChannel[79];
};
    genPid_t  *Base;
    digPid_t  *Adv;
    digPid4_t *Pro;
typedef HRESULT (WINAPI *importFunction)(LPCWSTR,LPCWSTR,LPCWSTR,LPVOID,genPid_t*,digPid_t*,digPid4_t*);
#pragma argsused 
int _tmain(int argc, _TCHAR* argv[])
{
    genPid_t  Base1;
    digPid_t  Adv1;
    digPid4_t Pro1;
    Base1.cbSize = 50;
    Adv1.cbSize = 164;
    Pro1.cbSize = 1272;
    String Key = "22TKD-F8XX6-YG69F-9M66D-PMJBM";
    importFunction GeneratePID;
    // Load DLL file
    HINSTANCE hinstLib = LoadLibrary(TEXT("pidgenx.dll"));
    if (hinstLib == NULL) {
        printf("ERROR: unable to load DLL\n");
        system("pause");
    }

    // Get function pointer
    GeneratePID = (importFunction)GetProcAddress(hinstLib, "PidGenX");
    if (GeneratePID == NULL) {
        printf("ERROR: unable to find DLL function\n");
        FreeLibrary(hinstLib);
        system("pause");
    }

    // Call function.
    GeneratePID(Key.w_str(), L"pkeyconfig.xrm-ms", L"XXXX", 0, Base, Adv, Pro);
    // Unload DLL file
    FreeLibrary(hinstLib);

    // Display result

    char* i = Adv1.productID;
    printf(i);
    printf("\n");


    system("pause");
}
//---------------------------------------------------------------------------  


Nie wiem dlaczego i zawsze wychodzi "dow" - nawet kiedy wsadzę funkcję do komentarza - czyli jakby nic się z tym nie zmieniało.

Za to Adv1.editionID generuje znaki:"└B*" gdzie gwiazdka to dowolny znak, zawsze inny o.0


Chyba dam sobie spokój :/
Avatar użytkownika
janek2012
Bladawiec
Bladawiec
 
Posty: 30
Dołączył(a): poniedziałek, 12 lipca 2010, 22:56
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows 8 x64
Kompilator: C++ Builder XEe
SKYPE: janek2012
Gadu Gadu: 1489603
    Windows 7Opera

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez polymorphism » czwartek, 15 lipca 2010, 21:16

przeczytałem artykuł Barona o strukturach i już mniej więcej wiem o co kaman.

Może o strukturach coś tam wiesz, ale o zmiennych niewiele, tzn nic:
Kod: Zaznacz cały
genPid_t  *Base;
digPid_t  *Adv;
digPid4_t *Pro;

(...)

genPid_t  Base1;
digPid_t  Adv1;
digPid4_t Pro1;

Base1.cbSize = 50; //<--- zobacz do czego służy sizeof()
Adv1.cbSize = 164; //<--- j/w.
Pro1.cbSize = 1272; //<--- j/w.

(...)

GeneratePID(Key.w_str(), L"pkeyconfig.xrm-ms", L"XXXX", 0, Base, Adv, Pro); 

Na co wskazują Base, Adv i Pro? Po co w ogóle one tam są? Definicje wskaźników zupełnie nie są Ci potrzebne, bo masz Base1, Adv1 i Pro1. Poczytaj o referencji i wskaźnikach. Następna rzecz to to, że całkowicie ignorujesz wartość, którą zwraca funkcja GeneratePID. Przecież ona jest kluczowa, to od niej zależy, czy dane zawarte w strukturach są poprawne. Pisałem jakie ta funkcja zwraca wartości i co one oznaczają.

Dlaczego cbSize zmieniłeś na unsigned int? Tam ma być DWORD, bo int, w zależności od platformy, może być różnej wielkości. DWORD daje 100% pewność, że zawsze będzie typem 32-bitowym.

Chyba dam sobie spokój :/

Sprawa jest w sumie banalna, ale musisz liznąć trochę podstaw... z książki.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez janek2012 » czwartek, 15 lipca 2010, 23:12

Wiem po co jest sizeof(), ale wartości wpisałem takie jakie mają być : 50, 164 i 1272. Faktycznie, lepiej jest użyć jednak DWORD.
No a co do wartości funkcji - ona nie jest dla mnie akurat najwazniejsza, ale jak już wspominałem (może nie zwróciłeś uwagi), działa to tak, że wysyłam funkcji jako 3 ostatnie argumenty ciągi bajtów tak, by funkcja zmieniła ich wartości, i te wartości są kluczowe :)

Kod: Zaznacz cały
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------


#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <winbase.h>
#include <wingdi.h>
using namespace std;

struct genPid_t
{
    DWORD cbSize;
    WCHAR    productId[48];
};

struct digPid_t
{
    DWORD cbSize;
    BYTE    dwUnknown1[4];
    CHAR    productID[28];
    CHAR    editionID[16];
    BYTE    bUnknown2[112];
};

struct digPid4_t
{
    DWORD cbSize;
    BYTE    unknown[4];
    WCHAR    extendedPID[64];
    WCHAR    activationID[72];
    WCHAR    editionID[304];
    WCHAR    subType[64];
    WCHAR    licenseType[49];
    WCHAR    licenseChannel[79];
};
typedef HRESULT (WINAPI *importFunction)(LPCWSTR,LPCWSTR,LPCWSTR,LPVOID,genPid_t*,digPid_t*,digPid4_t*);
#pragma argsused 
int _tmain(int argc, _TCHAR* argv[])
{
    genPid_t  Base;
    digPid_t  Adv;
    digPid4_t Pro;
    Base.cbSize = 50;
    Adv.cbSize = 164;
    Pro.cbSize = 1272;
    String Key = "22TKD-F8XX6-YG69F-9M66D-PMJBM";
    importFunction GeneratePID;
    // Load DLL file
    HINSTANCE hinstLib = LoadLibrary(TEXT("pidgenx.dll"));
    if (hinstLib == NULL) {
        printf("ERROR: unable to load DLL\n");
        system("pause");
    }

    // Get function pointer
    GeneratePID = (importFunction)GetProcAddress(hinstLib, "PidGenX");
    if (GeneratePID == NULL) {
        printf("ERROR: unable to find DLL function\n");
        FreeLibrary(hinstLib);
        system("pause");
    }

    // Call function.
    GeneratePID(Key.w_str(), L"pkeyconfig.xrm-ms", L"XXXX", 0, &Base, &Adv, &Pro);
    // Unload DLL file
    FreeLibrary(hinstLib);

    // Display result

    char* i = Adv.editionID;
    printf(i);
    printf("\n");


    system("pause");
}
//---------------------------------------------------------------------------   


Niepotrzebne wskaźniki zostały usunięte - tak chyba jest dobrze... Program robi to samo co wcześniej.
Avatar użytkownika
janek2012
Bladawiec
Bladawiec
 
Posty: 30
Dołączył(a): poniedziałek, 12 lipca 2010, 22:56
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows 8 x64
Kompilator: C++ Builder XEe
SKYPE: janek2012
Gadu Gadu: 1489603
    Windows 7Opera

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez polymorphism » piątek, 16 lipca 2010, 00:21

Wiem po co jest sizeof(), ale wartości wpisałem takie jakie mają być : 50, 164 i 1272

Czyżby?

ona nie jest dla mnie akurat najwazniejsza, ale jak już wspominałem (może nie zwróciłeś uwagi), działa to tak, że wysyłam funkcji jako 3 ostatnie argumenty ciągi bajtów tak, by funkcja zmieniła ich wartości, i te wartości są kluczowe

Zrozum, że jeśli funkcja zwróci błąd, zawartość struktur będzie nieważna. Oczywiście możesz się upierać przy swoim, tylko nie pisz później tego typu rzeczy:
a to Adv1.editionID generuje znaki:"└B*" gdzie gwiazdka to dowolny znak, zawsze inny o.0


A, i nie tłumacz mi, jak działa ta funkcja, bo to nie ja mam z nią problem, tylko Ty 8-)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Generowanie klucza PID dla systemu Windows 7

Nowy postprzez janek2012 » piątek, 16 lipca 2010, 00:33

OK, przepraszam, ale czy mógłbyś proszę wskazać mi gdzie jest mój błąd?

PS. Wiem, że wartości wielkości nie zgadzają się z faktycznym rozmiarem struktur, ale tak ma być (chyba) :P

EDIT: znalazłem śródło takiego programu dla Visty (na 7 tez działa):
http://www.megaupload.com/?d=Y1U3CD90

- tak więc dziękuję za pomoc i przepraszam za moją zdolność denerwowania osób które próbują mnie czegoś nauczyć :)
Avatar użytkownika
janek2012
Bladawiec
Bladawiec
 
Posty: 30
Dołączył(a): poniedziałek, 12 lipca 2010, 22:56
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows 8 x64
Kompilator: C++ Builder XEe
SKYPE: janek2012
Gadu Gadu: 1489603
    Windows 7Opera

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 37 gości

cron