Post

Windows Tipos de Datos

Windows Tipos de Datos

Tipos de datos de Windows

Tipos de datos de windows: [[https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types]]

Algunos de los tipos de datos comunes se enumeran a continuación:

  • DWORD- Un entero sin signo de 32 bits sin signo usado en 32 como 64 BITS representar valores de 0 hasta 2^32-1
    1
    
    DWORD dwVariable = 42;
    
  • size_t- Se utiliza para representar el tamaño de un objeto. Es un número entero sin signo de 32 bits en sistemas de 32 bits que representa valores desde 0 hasta (2^32 - 1) Por otro lado, es un número entero sin signo de 64 bits en sistemas de 64 bits que representa valores desde 0 hasta (2^64 - 1).
    1
    
    SIZE_T sVariable = sizeof(int);
    
  • VOID- Indica la ausencia de un tipo de datos específico.
    1
    
    void* pVariable = NULL; // This is the same as PVOID
    
  • PVOID- Un puntero de 32 bits o 4 bytes de cualquier tipo de datos en sistemas de 32 bits. Alternativamente, un puntero de 64 bits u 8 bytes de cualquier tipo de datos en sistemas de 64 bits.
    1
    
    PVOID pVariable = &SomeData;
    
  • HANDLE- Un valor que especifica un objeto particular que administra el sistema operativo (por ejemplo, archivo, proceso, hilo).
    1
    
    HANDLE hFile = CreateFile(...);
    
  • HMODULE- Un identificador para un módulo. Esta es la dirección base del módulo en la memoria. Un ejemplo de MÓDULO puede ser un archivo DLL o EXE.
    1
    
    HMODULE hModule = GetModuleHandle(...);
    
  • LPCSTR|LPSTR/PCSTR|PSTR - Un puntero a una cadena constante terminada en nulo de caracteres de Windows (ANSI) de 8 bits.
    • La “L” significa “largo”
    • La “C” significa variable “constante” o de sólo lectura.
      • Ambos tipos de datos son equivalentes a const char*.
        1
        2
        
        LPCSTR  lpcString   = "Hello, world!";
        PCSTR   pcString    = "Hello, world!";
        

        LPSTR y PSTR no apunte a una variable constante, sino a una cadena legible y escribible.

  • Ambos tipos de datos son equivalentes a char*.
    LPSTR   lpString    = "Hello, world!";
    PSTR    pString     = "Hello, world!";
    
  • LPCWSTR/PCWSTR - Un puntero a una cadena constante terminada en nulo de caracteres Unicode de Windows de 16 bits (Unicode). Ambos tipos de datos son equivalentes a const wchar*.
    1
    2
    
    LPCWSTR     lpwcString  = L"Hello, world!";
    PCWSTR      pcwString   = L"Hello, world!";
    
  • PWSTR/LPWSTR - Lo mismo que LPCWSTR y PCWSTR, la única diferencia es que ‘PWSTR’ y ‘LPWSTR’ no apuntan a una variable constante, sino a una cadena legible y escribible. Ambos tipos de datos son equivalentes a wchar*.
    1
    2
    
    LPWSTR  lpwString   = L"Hello, world!";
    PWSTR   pwString    = L"Hello, world!";
    

    que se deriva del período de programación de Windows de 16 bits; hoy en día no afecta el tipo de datos, pero la convención de nomenclatura todavía existe.

Punteros de tipos de datos

donde los tipos de datos que comienzan con “P” representan punteros al tipo de datos real, mientras que los que no comienzan con “P” representan el tipo de datos real en sí.

  • PHANDLE es lo mismo que HANDLE*.
  • PSIZE_T es lo mismo que SIZE_T*.
  • PDWORD es lo mismo que DWORD*.

    Funciones ANSI y Unicode

La mayoría de las funciones de la API de Windows tienen dos versiones que terminan en “A” o en “W”.

  • Las funciones que terminan en “A” pretenden indicar “ANSI”
    • ANSI tomarán tipos de datos ANSI como parámetro
  • las funciones que terminan en “W” representan Unicode o “Wide”.
    • las funciones Unicode tomarán tipos de datos Unicode.

Analizar el tipo de retorno y los parámetros

1
2
3
4
5
6
7
8
9
HANDLE CreateFileW(
  [in]           LPCWSTR               lpFileName,
  [in]           DWORD                 dwDesiredAccess,
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//

#include <iostream>
#include <Windows.h>
#include <stdio.h>


using namespace std; 


int main()
{

	HANDLE hfile = INVALID_HANDLE_VALUE; //  INICIAR LA VARIABLE

	LPCWSTR filepath = L"D:\\MALDEV\\oyara.txt";


	hfile = CreateFileW(filepath, GENERIC_ALL, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

	if (hfile == INVALID_HANDLE_VALUE) {
	
		printf("Ultimo error: %p", GetLastError());
		return -1;
	}

}


Errores de depuración de la API de Windows

Lista de códigos de error del sistema de Windows.

  • 5- ERROR_ACCESO_DENEGADO
  • 2- ERROR_ARCHIVO_NO_ENCONTRADO
  • 87- ERROR_PARÁMETRO_INVÁLIDO
This post is licensed under CC BY 4.0 by the author.