CryptProtectData x64

Für allgemeine Fragen zur Programmierung mit PureBasic.
kevv
Beiträge: 31
Registriert: 28.11.2010 15:52

CryptProtectData x64

Beitrag von kevv »

x86 ok
x64 fehler: The parameter is incorrect.

Kann jemand helfen.

Code: Alles auswählen


; #include <iostream>
; #include <stdio.h>
; #include <windows.h>
; #include <Wincrypt.h>
; using namespace std;
; 
; int main()
; {
; 
; // Encrypt Data from DATA_BLOB DataIn To DATA_BLOB DataOut.
; //--------------------------------------------------------------------
; // Declare And initialize variables.
; 
; DATA_BLOB DataIn;
; DATA_BLOB DataOut;
; BYTE *pbDataInput =(BYTE *)"Hello world of data protection.";
; DWORD cbDataInput = strlen((char *)pbDataInput)+1;
; 
; //--------------------------------------------------------------------
; // Initialize the DataIn Structure.
; 
; DataIn.pbData = pbDataInput;
; DataIn.cbData = cbDataInput;
; 
; //--------------------------------------------------------------------
; //  Begin protect phase. Note that the encryption key is created
; //  by the function And is Not passed.
; 
; If(CryptProtectData(
;      &DataIn,
;      L"string.", // A description string
;                                          // To be included With the
;                                          // encrypted Data.
;      NULL,                               // Optional entropy Not used.
;      NULL,                               // Reserved.
;      NULL,                               // Pass NULL For the
;                                          // prompt Structure.
;      0,
;      &DataOut))
; {
;      printf("The encryption phase worked.\n");
; }
; Else
; {
;     printf("Encryption error using CryptProtectData.\n");
;     exit(1);
; }
; 
;     cout << DataOut.cbData << endl;
;     cout << DataOut.pbData << endl;
; 
;     Return 0;
; }
; 




ImportC ""
  strlen(p)
EndImport

Structure DATA_BLOB
  cbData.l
  *pbData
EndStructure

DataIn.DATA_BLOB
DataOut.DATA_BLOB

*pbDataInput = UTF8("Hello")
cbDataInput.l = strlen(*pbDataInput)+1;

DataIn\pbData = *pbDataInput
DataIn\cbData = cbDataInput

If OpenLibrary(0, "crypt32.dll")
  result.b = CallFunction(0, "CryptProtectData", @DataIn, UTF8("Hello"),#NUL,#NUL,#NUL,0, @DataOut)
  If result
    Debug "ok"
  Else
    Debug "error: " + GetLastError_()
    ;https://msdn.microsoft.com/de-de/library/windows/desktop/ms681381(v=vs.85).aspx
  EndIf
EndIf  


; Debug DataOut\pbData
; Debug DataOut\cbData


Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: CryptProtectData x64

Beitrag von ts-soft »

Code: Alles auswählen

Structure DATA_BLOB
  cbData.i
  *pbData
EndStructure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: CryptProtectData x64

Beitrag von Mijikai »

Zu langsam :o

Code: Alles auswählen

Import "crypt32.lib"
  CryptProtectData(*pDataIn,szDataDescr.s,*pOptionalEntropy,pvReserved.i,*pPromptStruct,dwFlags.l,*pDataOut)
EndImport

Structure CRYPTOAPI_BLOB
  cbData.i
  *pbData
EndStructure

Global CI.CRYPTOAPI_BLOB
Global CO.CRYPTOAPI_BLOB
Global Text.s

Text = "Hallo!"

CI\pbData = @Text
CI\cbData = (Len(Text) + 1) * SizeOf(Character)

Debug CryptProtectData(@CI,#Null$,#Null,#Null,#Null,#Null,@CO)
Debug CO\pbData
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: CryptProtectData x64

Beitrag von edel »

cbData ist 4 und nicht 8 Byte lang.

Code: Alles auswählen

Structure DATA_BLOB Align #PB_Structure_AlignC
  cbData.l
  *pbData
EndStructure
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: CryptProtectData x64

Beitrag von ts-soft »

edel hat mal wieder Recht :allright:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten