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-11
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!";
LPSTRyPSTRno apunte a una variable constante, sino a una cadena legible y escribible.
- Ambos tipos de datos son equivalentes a
- 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 aconst wchar*.1 2
LPCWSTR lpwcString = L"Hello, world!"; PCWSTR pcwString = L"Hello, world!";
PWSTR/LPWSTR- Lo mismo queLPCWSTRyPCWSTR, 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 awchar*.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í.
PHANDLEes lo mismo queHANDLE*.PSIZE_Tes lo mismo queSIZE_T*.PDWORDes lo mismo queDWORD*.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_DENEGADO2- ERROR_ARCHIVO_NO_ENCONTRADO87- ERROR_PARÁMETRO_INVÁLIDO