Windows_Program_Via_C_Translate_Win32编程的背景知识/基础知识_包含要旨输入输出机制介绍

关门一个目标的句柄

概念语法:

      typedef HANDLE HGLOBAL;

 

hObject-[in]: 必要获取新闻的对象的句柄。你可以位那一个参数传递下列对象的句柄: 访问信令、事件、文件、文件印象文件、作业、互斥对象、管道、打印机、进度、注册表键、串行通讯装备、套接字、线程或 定时器。

概念语法:

LONG_PTR

  FILE_SHARE_WRITE,          // share for writing

LPCOLORREF

The parameters

 

WINVER >= 0x0400

typedef unsigned int DWORD32;

Handle to a brush.  This type is declared in windef.h as follows: typedef HANDLE HBRUSH;

 

    typedef HANDLE HDC;

Pointer Precision

This line of text is from standard input

A PCWSTR if UNICODE is defined, a PCSTR otherwise.

 

HDWP

Handle to a cursor.  This type is declared in windef.h as follows:

颜色空间对象句柄,在头文件windef中定义。

The header file

Windows对象和句柄

PSSIZE_T

复制一个对象句柄

PINT64

For Visual C++ 6.0:  To specify compiler options, go to the Projects menu and click Settings, then select the C/C++ tab.

          typedef  int BOOL;

Pointer to a UINT.  This type is declared in windef.h as follows: typedef UINT *PUINT;

Type

一大半的指针类型的项目名前边都加了P或者LP(长指针)前缀,而句柄类型则加了H前缀。

The following Table contains types of character, integer, Boolean, pointer, and handle.  The character, integer, and Boolean types are common to most C/C++ compilers.  The types also include the 64 bits size.

Pointer to a constant of any type.  This type is declared in windef.h as follows:

The following Table lists the required information in order to use the DuplicateHandle() function.

The return value

 

 

 

       typedef HANDLE HHOOK;

32位无符号整型,在头文件windef.h中定义。

A WCHAR if UNICODE is defined, a CHAR otherwise.  This type is declared in winnt.h as follows:

DWORD_PTR

Retrieves certain properties of an object handle.

There is no new constructs you will find in this Module except functionsarrayspointers and structures.

   }

PBYTE

WINVER >= 0x0400

概念语法:

 

The prototype

 

From the information in the previous Table, the following program example shows how to obtain an object handle (file) and the use of the GetHandleInformation() function.

PUSHORT

函数成效

hStdinWr,                          // standard input handle

 

 

GetCurrentProcess(),      // process to receive the duplicated handle

The function

Graphic Device Interface (GDI) object

GDI对象

Bitmap, Brush, Device Context (DC), Enhanced metafile, Enhanced-metafile DC, Font, Memory DC, Metafile, Metafile DC, Palette, Region, Pen and extended pen.

 

位图、画刷、设备内容、增强metafile、增强metafile设备内容、内存映像文件、MeteFile等

DuplicateHandle()

Handle to a dynamic data exchange (DDE) conversation.  This type is declared in ddeml.h as follows:  typedef HANDLE HCONV;

64-bit unsigned integer.  This type is declared in basetsd.h as follows:

 

 

If the function succeeds, the return value is a handle to the specified device, or a redirected handle set by a previous call toSetStdHandle().  The handle has GENERIC_READ and GENERIC_WRITE access rights, unless the application has usedSetStdHandle() to set a standard handle with lesser access.

Pointer to a bool.  This type is declared in windef.h as follows: typedef BOOL *PBOOL;

Duplicates an object handle.

#else

             printf(“Data to the standard output:\n”);

上面是一个运用GetStdHandle函数来博取标准输入输出设备句柄的言传身教。

可以通过Windows Error Codes可以查看完整的有关windows操作系统定义的错误代码。你可以调用FormatMessage函数来将错误代码转换成你要求的有关函数重回错误原因的字符串音信。

 

Handle to a module.  The value is the base address of the module.  This type is declared in windef.h as follows:  typedef HINSTANCE HMODULE;

画刷句柄

 

typedef double ULONGLONG

浮点类型

概念语法:

字节类型

在某些景况下,复制对象句柄可能装有比原句柄更高的拜会权限,而在其它一些情景下复制对象句柄可能所有比原句柄更低的走访权限。 

typedef unsigned __int64 ULONG_PTR;

Handle to an accelerator table.  This type is declared in windef.h as follows:

 

       // read from standard input, keyboard.

    typedef HANDLE HLOCAL;

<windows.h>

Unsigned LONG32.  This type is declared in basetsd.h as follows: typedef unsigned int ULONG32;

Most functions that set the thread’s last error code value set it when they fail; a few functions set it when they succeed.

Pointer to a ULONG_PTR.  This type is declared in basetsd.h as follows: typedef ULONG_PTR *PULONG_PTR;

The following program example uses GetStdHandle() function for standard input and output handles.

实例句柄,在头文件windef中定义。

Example

一些内存块对象句柄,在头文件windef中定义。

   char chrBuf[BUFSIZE];

Kernel object

描述/解释

 

Unsigned INT32

 

GetHandleInformation()

    typedef HANDLE HMONITOR;

LPWSTR

LONG

GetStdHandle().

WINAPI

 

Example

莫不你会专注到,很多数据类型具有相同的基类型,他们只可是是经过typedef机制定义的数据类型的别名(注:严厉来说无法算得数据类型别名,应该就是新的数据类型);或者为图形界面下编程函数使用而用#define定义的宏

UHALF_PTR

概念语法:

光标句柄

假定函数执行成功,再次回到值是非零。

收集必需的和有关的新闻, 建立一个这么些音讯的表格,然后选拔这一个音信成功一个落到实处。

Unsigned LONG.  This type is declared in windef.h as follows: typedef unsigned long ULONG;

 

获得某个对象句柄特定的新闻。

 

 

LPCWSTR

Handle to a palette.  This type is declared in windef.h as follows:

图标句柄

Closes an open object handle.

原子类型

 

位图对象句柄

This topic describes the support for operations on large (64-bit) integers provided by 32-bit Windows.  Applications can multiply signed or unsigned 32-bit integers, generating 64-bit results, by using the Int32x32To64() and UInt32x32To64() functions.  Applications can shift bits in 64-bit values to the left or right by using the Int64ShllMod32(),Int64ShraMod32(), and Int64ShrlMod32() functions.  These functions provide logical and arithmetic shifting.

HKEY

关闭句柄

Pointer to a DWORD.  This type is declared in windef.h as follows: typedef DWORD *LPDWORD;

布尔型变量(变量取值: TRUE和FALSE), 在头文件windef.h里面定义。

菜单句柄,在头文件windef中定义。

 

Information

ULONG_PTR

指定长度指针类型

 

// file and path

PLONG32

布尔类型

 

INT_PTR

#include <stdio.h>

 

 

The New Data Types

新数据类型

There are three classes of new data types: fixed-precision data types, pointer-precision types, and specific-precision pointers.  These types were added to the development environment (specifically, to basetsd.h) to allow developers to prepare for 64-bit Microsoft® Windows® well before its introduction.  These new types were derived from the basic C-language integer and long types, so they work in existing code.  Therefore, use these data types in your code now, test your code on 32-bit Windows, and recompile with the 64-bit compiler when 64-bit Windows is available.

在windows中提供了3种新的数据类型: 定精度数据类型、指针指向型数据结构和指定数据精度指针类型。这些数据类型在开发环境中(有basetsd.h头文件提供定义支持)增加是为了允许开发者开发64位windows应用程序做准备,这些数据类型派生与基本C语言数据类型,这些数据类型已经在使用。因此可以在你windows 32位平台的代码中使用这些数据类型,当你使用64位windows的时候重新编译你的代码。

 

There is an additional benefit to adopting these new data types now: it will make your code more robust.  To use these data types, you must scan your code for potentially unsafe pointer usage, polymorphism, and data definitions.  To be safe, use the new types.  For example, when a variable is of type ULONG_PTR, it is clear that it will be used for casting pointers for arithmetic operations or polymorphism.  It is not possible to indicate such usage directly by using the existing data types.  You can do this by using derived type naming or Hungarian notation, but both techniques are prone to errors.

现在使用这些新的数据类型还有一个好处,它可以使你的代码更加健壮。为了使用这些数据类型,你必须排查你代码中潜在的不安全的指针、 polymorphism、和数据定义。为了代码安全,请使用新的数据类型。例如,当定义一个ULONG_PTR类型变量时,很显然他将在用于数据类型转换或者 polymorphism中将指针进行转换成目标数据类型。利用现有的数据结构或者类型就不能这么清楚的指明这一点。你能通过使用内置的数据类型或者 Hungarian notation,但是两种方法都容易产生错误。

hTargetProcessHandle – [in] Handle to the process that is to receive the duplicated handle. The handle must have the PROCESS_DUP_HANDLE  access right.

声称语法:

Example

   重临的句柄具有  GENERIC_READ 和 GENERIC_WRITE的造访权限, 除非应用程序通过SetStdHandle函数设定标准句柄具有任何更低的权位。

Function

   for(;;)

WINVER >= 0x0502

这一个句柄可以被ReadFile函数和WriteFile函数使用,或者被其它可以访问控制台输入缓存区和控制台窗口缓存区的函数使用, 例如可以被ReadConsoleInput函数、WriteConsole函数、以及GetConsoleScreenBufferInfo函数使用。

   hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

画刷对象句柄,在windef头文件中定义。

Unsigned INT64

Metafile对象句柄,在头文件windef中定义。

Later on we will concentrate on the file management functions that available in Win32 APIs by collecting the required and related information and then try building simple working programs.

要含有头文件 window.h 

#if defined(_WIN64)

复制一个目的句柄。

Pointer to a SHORT.  This type is declared in winnt.h as follows: typedef SHORT *PSHORT;

Pointer to a LONG32.  This type is declared in basetsd.h as follows: typedef LONG32 *PLONG32;

概念语法:

dwOptions – [in] Optional actions. This parameter can be zero, or any combination of the following values.DUPLICATE_CLOSE_SOURCE – Closes the source handle.  This occurs regardless of any error status returned.DUPLICATE_SAME_ACCESS – Ignores the dwDesiredAccess parameter.  The duplicate handle has the same access as the source handle.

Definition

 

32-bit signed integer

Data to the standard output:

Applications can also multiply and divide 32-bit values in a single operation by using the MulDiv() function.  Although the result of the operation is a 32-bit value, the function stores the intermediate result as a 64-bit value, so that information is not lost when large 32-bit values are multiplied and divided.

那里钻探32位windows对64位整型数据的帮衬。应用程序通过利用Int32X32To64()函数或者UInt32X32To64()函数可以将有标志、无符号的32位整型数据相乘获得64位的结果。应用程序同样可以通过动用Int64ShllMod32()函数和Int64ShraMod32()函数和Int64ShrlMod32()函数进行活动操作;这么些函数提供逻辑和算术移位操作功效。

Pointer to a COLORREF value.  This type is declared in windef.h as follows: typedef DWORD *LPCOLORREF;

Pointer to a null-terminated string of 8-bit Windows (ANSI) characters.  This type is declared in winnt.h as follows:  typedef CHAR *LPSTR;

 

Instead, an application must obtain an object’s handle, which will be use to access, examine or modify the system resource.

例如,GetDllDirectory函数在Windows Server 2003里面,如果_WIN32_WINNT宏定义代表的值超出等于0X0502,那么它就被定义。 同样那么些函数在WinXP SP1中一律可用。 由此假诺你早已定义使用于WinXP的_WIN32_WINNT宏,那么XP SP1的有些特色将不可用。

hFile = CreateFile(fname,       // file to be opened

       typedef HANDLE HINSTANCE;

#else

描述/ 解释

USHORT

Pointer to an INT32.  This type is declared in basetsd.h as follows: typedef INT32 *PINT32;

Handle to a window.  This type is declared in windef.h as follows: typedef HANDLE HWND;

HOOK钩子句柄

局地windows 函数使用LARGE_INTEGER结构来支持64位有标志整型,而接纳ULARGE_INTEGER结构来支撑64位无符号整型。你的C编译器可能内置接济64位的整型数据;例如微软的Visual C++接济__int64位长度的整型。

       if(!fSuccess)

In Windows Server 2003, Windows XP/2000, this parameter can also be a handle to a console input buffer or a console screen buffer.

hSourceHandle – [in], 要求复制的句柄,一个在源进度中开辟的有用的句柄。

HENHMETAFILE

概念语法:

HANDLE hFile;

The use

Table 8:  GetHandleInformation() information.

此处将不再描述除了函数、数组、指针和布局体外的新的数据类型。

信息

   倘诺那么些函数成功执行,那么重返值就是一个针对指定设备的句柄,或者是一个对准通过SetStdHandle函数重定向的装置的句柄值。

 

句柄标识被系统加载至内存区域的一中资源,在前面的模块将会特意的牵线句柄那种数据类型。

Pointer to a constant null-terminated string of 16-bit Unicode characters.  This type is declared in winnt.h as follows:  typedef CONST WCHAR *LPCWSTR;

设备内容对象句柄

一个进度的科鲁班入输出设备可能会经过调用SetStdHandle函数进行重定向,那种气象下可以透过GetStdHandle函数来赢得进程经过重定向后的标号输入输出设备的句柄。 借使标准输入输出设备被重定向了,那么在应用程序中调用CreateFile函数时可以经过点名CONIN$参数来收获一个针对性控制台输入缓冲区的句柄。

You can define these symbols by using the #define statement in each source file, or by specifying the /D compiler option supported by Visual C++.

PCHAR

A 32-bit pointer. On 32-bit Windows, this is a native pointer.  On 64-bit Windows, this is a truncated 64-bit pointer.

2、DUPLICATE_SAME_ACCESS

关键字

<windows.h>

大整数

那个函数完成卷标管理、磁盘管理、目录管理和文书管理,那里大家的座谈都将基于NTFS文件系统。

声称语法如下:

nStdHandle – [in]:提议要被重新设定的正式配备。可以取上面多少个值:

Description

PLCID

The following Table lists the required information in order to use the GetStdHandle() function.

64-bit unsigned integer.  This type is declared in winnt.h as follows:

In Windows, an object is a data structure that represents a system resource, such as a file, thread, or graphic image. So, in Windows we are dealing with objects.

概念语法:

 

Red, green, blue (RGB) color value (32 bits).  This type is declared in windef.h as follows:  typedef DWORD COLORREF;

Boolean variable (should be TRUE or FALSE).  This type is declared in windef.h as follows: typedef int BOOL;

When a console is created, the standard input handle is a handle to the console’s input buffer, and the standard output and standard error handles are handles of the console’s active screen buffer.

 

 

STD_INPUT_HANDLE – Handle to the standard input device. Initially, this is a handle to the console input buffer, CONIN$.

   exit(1);

Example

返回值

nStdHandle – [in] Standard device for which a handle is to be returned. This parameter can be one of the following values:

DuplicateHandle().

LONGLONG

typedef LPCSTR LPCTSTR;

SC_HANDLE

 

Handle and Object Functions

 

Pointer to a WORD.  This type is declared in windef.h as follows: typedef WORD *LPWORD;

概念语法:

Handle to a hook.  This type is declared in windef.h as follows: typedef HANDLE HHOOK;

     typedef HICON HCURSOR;  

Unsigned INT_PTR.  This type is declared in basetsd.h as follows:

Pointer to a constant null-terminated string of 16-bit Unicode characters.  This type is declared in winnt.h as follows:  typedef CONST WCHAR *PCWSTR;

An application cannot directly access (communicate or interact with) object data or the system resource that an object represents.

WPARAM

 

DWORD64

Any type.  This type is declared in winnt.h as follows: #define VOID void

16-bit Unicode character.  This type is declared in winnt.h as follows: typedef wchar_t WCHAR;

Pointer to a LONG_PTR.  This type is declared in basetsd.h as follows: typedef LONG_PTR *PLONG_PTR;

Pointer to an int.  This type is declared in windef.h as follows: typedef int *PINT;

The prototype

 

不一致的头文件或者会只用不一样的宏,因而只要头文件发出编辑错误,那么就直接检查包含条件宏的头文件。

#define BUFSIZE 2048

Minimum system required

The use

User object

用户对象

Icon, Caret, Cursor, Dynamic Data Exchange (DDE) conversation, Hook, Accelerator table, Menu, Window, Window position.

图标、光标、动态数据交换、钩子、加速器表、菜单、窗口和窗口位置。

ULONG64

CloseHandle(hFile);

32-bit signed integer.  This type is declared in winnt.h as follows: typedef long LONG;

亟待维护windows.h 头文件才能引用该函数。

Pointer to a LONG.  This type is declared in winnt.h as follows: typedef LONG *PLONG;

Handle to an enhanced metafile.  This type is declared in windef.h as follows:

Unsigned LONG64.  This type is declared in basetsd.h as follows: typedef unsigned __int64 ULONG64;

 

typedef LPCWSTR LPCTSTR;

Handle to a DDE string.  This type is declared in ddeml.h as follows: typedef HANDLE HSZ;

UINT64

PDWORD_PTR

Unsigned int.  This type is declared in windef.h as follows: typedef unsigned int UINT;

Duplicates an object handle.

 

LONG64

Pointer to a DWORDLONG.  This type is declared in winnt.h as follows: typedef DWORDLONG *PDWORDLONG;

SIZE_T

Handle to a bitmap.  This type is declared in windef.h as follows: typedef HANDLE HBITMAP;

Handle to an object.  This type is declared in winnt.h as follows: typedef PVOID HANDLE;

目的句柄,在winnt头文件中定义。

<windows.h>

Pointer to an INT_PTR.  This type is declared in basetsd.h as follows: typedef INT_PTR *PINT_PTR;

bInheritHandle – [in]: 那么些参数设置复制对象句柄的接续特性,即使设置为TRUE,那么复制对象句柄的特点将可以一连。 假诺是FALSE,那么复制对象句柄的属性将不得以被接续。(注:就是说新创建的复制对象句柄的性质不得以被它的子对象所继承)

64位无符号整型

Handle to a global memory block.  This type is declared in windef.h as follows:

Language group identifier.  This type is declared in winnls.h as follows: typedef DWORD LGRPID;

Windows Data Types

PTCHAR

Collecting the required and related information, presented in a Table and

回调函数调用规则提示符,知识函数参数的调用规则(那么些一般由编译器定义),在头文件windef.h中宣示。

Window是目的连串

Pointer to a bool.  This type is declared in winnt.h as follows: typedef BOOLEAN *PBOOLEAN;

   // if something wrong with handle for standard input or output

BOOL fSuccess;

 

 

typedef __int64 INT_PTR;

 

 

Message parameter.  This type is declared in windef.h as follows: typedef UINT_PTR WPARAM;

To compile an application that uses these functions, you must define the appropriate macros. Otherwise, you will receive the C2065 error message.

Some Basic Background Story of The Win32 APIs

Win32 API背景故事/背景知识

The Win32 application programming interface (API) provides building blocks used by applications written for the Microsoft Windows operating system family.

It defines the 32-bit members of the Windows family from the programmer’s point of view and you will find out later, 64-bit members also included.  Some members of the Windows family use the entire Win32 API, while others use subsets.

 

Win32 API提供在微软windows操作系统平台上编制应用程序的函数功能块,Win32 API从应用程序程序员的角度定义32位windows家族平台下应用程序系统接口,在以后的windows版本将将能够看到64位windows平台的WinAPI(注:实际上在XP平台已经有64位版本的WinAPI)。一些windows平台使用全部的Win32 API函数,而一些windows版本则使用Win32 API的子集(注:在工业控制和移动应用中大家熟知的WinCE使用的就是Win32 API的子集,西门子的MP系列触摸屏使用的就是一个子集,在里面编程可以使用VBscript脚本)。

 

The Microsoft Foundation Class Library (MFC) encapsulates, or "wraps," most of the Win32 API but not all.

微软基础类库封装了Win32 API,但是不是所有的API函数都封装到了MFC.

 

MFC versions 2.x and earlier encapsulated the 16-bit Windows API.  MFC supplies classes representing key Windows objects, such as windows, dialog boxes, brushes, pens, and fonts.

2.x版本或更早版本的MFC封装了部分16位的WinAPI, MFC支持windows面向对象编程的中的对象的概念,例如窗口类、对话框类、画刷类、画笔类和字体类等。

 

The member functions of these classes wrap most of the important Win32 API functions associated with the encapsulated object.

这些类的成员函数封装了与这些对象相关的大部分重要的Win32 API函数。

 

The MFC class member function calls the Win32 API function, and might add functionality.

MFC类程序员调用Win32 API函数,并且可能自封装一些实现其他功能的成员函数。

 

The Active Template Library (ATL) is a set of template-based C++ classes that let you create small, fast Component Object Model (COM) objects.  ATL wraps Win32 and C run-time library APIs, but does not wrap Win32 to the extent that MFC does.

ATL类库是C++模板类库的一个子集,它让你可以创建小而快速的对象组建模型的对象。 ATL封装了Win32和C语言运行时类库函数,但是和MFC不一样的是它没有封装一些给予Win32的MFC扩展。

 

With Visual C++, you can program for Windows using either:

C or C++ and the Win32 API.

C++ and MFC or

C++ and ATL.

通过Visual C++你能够使用下下列模型来编制应用程序:

1、C语言、C++或者Win32 API。

2、C++或者MFC

3、C++或者 ATL。

 

For information about Win32 programming we normally refer to Win32 API and the documentation is available in the Platform SDK.

当提及Win32编程时,我们通常描述的是基于Win32 API和平台SDK的相关文档。

 

In the previous Module we have been introduced to some of the Microsoft implementation of the C using the C Run-time (CRT) libraries.  In this Module we will explore the Win32 APIs with C.

在前面的板块我们已经介绍过基于C和C语言运行时库CRT来完成一些微软Windows的应用实现,这里我们将介绍利用Win32和C来的应用实现。

 

This API is designed for use by C/C++ programmers but in this Module we still drop the Windows graphical user interface and message-driven related things, the MFC and ATL.  Don’t worry; C/C++ codes are reusable in the MFC and ATL.

API是为使用C/C++的程序员设计的,但是在这里我们讨论windows的图形用户界面接口和事件驱动机制,以及MFC和ATL相关的知识。不必担心,C/C++的代码可以在MFC和ATL中复用(注:这里指的是可以交叉使用)。

 

Whatever it is, from C/C++ view, these APIs are just functions.  As usual, we are going to learn how to use those functions.

然而从C/C++的观点来看,API只是函数,和通常一样我们将学习如何使用这些函数。

 

We will learn several categories of the available APIs.  For others, please refer to the Platform SDK documentations.

接下来我们将学习集中不同种类的API函数,为了更好的使用这些函数,或者需要更多的信息,请参考微软提供的平台SDK文档。

 

First of all let start with the most basic information required to fully understand how to use the Win32 APIs: the Windows data types, header files issue and handles.

首先,让我们来看看要完全学会使用Win32API的最基本的内容:windows数据类型、windows头文件和句柄。

Other than the standard data types that you have found when doing the C/C++ programming, there is a lot more in Win32 programming.

这些内容不仅仅是标准的C/C++的数据结构类型,而是为Win32编程设计的数据类型。

 

ULONG_PTR

The duplicate handle refers to the same object as the original handle.  Therefore, any changes to the object are reflected through both handles.

These various data types defined in several header files such as windef.h, basetsd.h, ddeml.h, shellapi.h, winuser.h, winsvc.h and winnt.h.

PTBYTE

Windows 2000

设定标准输入设备、标准输出设备、标准错误设备的句柄。

       typedef unsigned __int64 DWORD64;

FALSE,          

 

          break;

???

^Z

WindowsAPI相关的头文件允许你创立在差别的windows版本上同意的32位依然64位的应用程序。

#else

HANDLE hFile;

全局内存块句柄

PUCHAR

_WIN32_IE >= 0x0500

 

Handle to a window station.  This type is declared in windef.h as follows: typedef HANDLE WINSTA;

    typedef HANDLE HCONV;

         typedef ULONG_PTR DWORD_PTR;

_WIN32_IE >= 0x0300

     typedef int HFILE;

下表描述部分GetStdHandle函数的必需音信,以及怎么着使用它的部分新闻。

Signed SIZE_T.

Unsigned SHORT.  This type is declared in windef.h as follows: typedef unsigned short USHORT;

STD_INPUT_HANDLE – Handle to the standard input device.

Pointer to a FLOAT.  This type is declared in windef.h as follows: typedef FLOAT *PFLOAT;

急需包罗windows.h头文件。

As the pointer precision changes (that is, as it becomes 32 bits on 32-bit Windows and 64 bits with 64-bit Windows), these data types reflect the precision accordingly.  Therefore, it is safe to cast a pointer to one of these types when performing pointer arithmetic; if the pointer precision is 64 bits, the type is 64 bits.  The count types also reflect the maximum size to which a pointer can refer.  The following are the pointer-precision and count types.

 fSuccess = DuplicateHandle(

typedef __int64 LONGLONG;

Pointer to a DWORD32.  This type is declared in basetsd.h as follows: typedef DWORD32 *PDWORD32;

字体对象句柄

Some features introduced in the latest version of Windows may be added to a service pack for a previous version of Windows.  Therefore, to target a service pack, you may need to define _WIN32_WINNT with the value for the next major operating system release.

0,                                        // access for the duplicated/new handle

加快器表句柄

1、STD_INPUT_HANDLE 

Windows Server 2003 family

The return value is 1, error 0

The maximum number of bytes to which a pointer can point.  Use for a count that must span the full range of a pointer.  This type is declared in basetsd.h as follows: typedef ULONG_PTR SIZE_T;

                FILE_ATTRIBUTE_NORMAL |FILE_ATTRIBUTE_ARCHIVE | SECURITY_IMPERSONATION,

对于 VC++ 7.0,为了设置编译器编译选项,那么通过 工程——》属性菜单来拓展安装。 

SERVICE_STATUS_HANDLE

 

8-bit Windows (ANSI) character.  This type is declared in winnt.h as follows:

???

Data to the standard output:

HLOCAL

This line of text is from standard input

#else

Update sequence number (USN).  This type is declared in winnt.h as follows: typedef LONGLONG USN;

_WIN32_WINDOWS = 0x0500

只读变量修饰符

PSIZE_T

Pointer to a ULONG64.  This type is declared in basetsd.h as follows: typedef ULONG64 *PULONG64;

Pointer to a USHORT.  This type is declared in windef.h as follows: typedef USHORT *PUSHORT;

Pointer to an LCID.  This type is declared in winnt.h as follows: typedef PDWORD PLCID;

 

Description

Unsigned INT_PTR.

The use

指南针精度/指针长度

Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters.  This type is declared in winnt.h as follows: typedef CONST CHAR *LPCSTR;

Windows头文件的本子

动态数据互换对象句柄,在头文件ddeml中定义。

 

hSourceProcessHandle – [in]: 待复制对象句所在进程的句柄。那个历程句柄必须具备PROCESS_DUP_HANDLE的拜访权限。

Table 4: Another pointer precision types.

动态数据调换列表句柄;在头文件ddeml中定义。

       fSuccess = WriteFile(hStdout, chrBuf, dwRead, &dwWritten, NULL);

 

      typedef  unsigned char BYTE;

 

64-bit signed integer.  This type is declared in basetsd.h as follows: typedef __int64 LONG64;

设若没有有限支撑您在编译时选择的是风靡版本的SDK头文件,而在您的代码中运用了Visual C++发表时介绍的新特点,那么在编译代码的进程中您将可能看到如下的错误代码:error C2065: undeclared identifier.

typedef LPSTR LPTSTR;

typedef LPWSTR LPTSTR;

HRGN

LGRPID

Pointer to any type.  This type is declared in winnt.h as follows: typedef void *PVOID;

LCTYPE

Table 3: Pointer precision

PULONG_PTR

       fSuccess = ReadFile(hStdin, chrBuf, BUFSIZE, &dwRead, NULL);

下表例举了部分数据类型如:字符型、整型、布尔型、指针型和句柄类型。字符、整型和布尔类型被多数的C/C++编译器支持。这么些数据类型中还包蕴64位的数据类型。

The return value

HMONITOR

LPCTSTR

PHKEY

And another example of the required information in order to use CloseHandle() function.

概念语法:

  FILE_ATTRIBUTE_NORMAL |FILE_ATTRIBUTE_ARCHIVE |  SECURITY_IMPERSONATION,

LPDWORD

2、 GDI对象来襄助图形。

 

示例

       if(!fSuccess || dwRead == 0)

句柄和对象函数

A complete list of error codes provided by the operating system can be found at Windows error codes.  To obtain an error string for system error codes, you can use theFormatMessage() function.

Windows对象类型/连串

 

PLONG_PTR

ATOM

Boolean variable (should be TRUE or FALSE).  This type is declared in winnt.h as follows:  typedef BYTE BOOLEAN;

lpdwFlagstaff-[out] 变量指针,指针指向的变量是一个位旗标, 通过位旗标来提醒句柄对象的属性。上边是有的预定义值:

If the function succeeds, the return value is nonzero.

   hStdin = GetStdHandle(STD_INPUT_HANDLE);

 

 

64-bit pointer.  On a 64-bit system, this is a native pointer.  On a 32-bit system, this is a sign-extended 32-bit pointer.  This type is declared in basetsd.h as follows:

PINT_PTR

赢得句柄音讯

HANDLE_FLAG_PROTECT_FROM_CLOSE: 假若设置了这些位旗标,那么在调用CloseHandle函数的时候将不可能健康裁撤对象句柄。

typedef HANDLE HDDEDATA;

#define POINTER_64 __ptr64

Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters.  This type is declared in winnt.h as follows: typedef CONST CHAR *PCSTR;

 

Sets the handle for the standard input, standard output, or standard error device.

The header file

Pointer to any type.  This type is declared in windef.h as follows: typedef void *LPVOID;

// if something wrong with handle

 

归来标准输入输出设备的句柄。

32-bit pointer.  On a 32-bit system, this is a native pointer.  On a 64-bit system, this is a truncated 64-bit pointer.  This type is declared in basetsd.h as follows:

SetStdHandle().

64-bit signed integer.  This type is declared in basetsd.h as follows: typedef signed __int64 INT64;

lpdwFlags – [out] Pointer to a variable that receives a set of bit flags that specify properties of the object handle.  The following values are defined:

Atom.  This type is declared in windef.h as follows: typedef WORD ATOM;

#define POINTER32

64-bit signed integer

DuplicateHandle() can be called by either the source process or the target process (or a process that is both the source and target process).

 

 

The return value

Signed long type for pointer precision.

Variable whose value is to remain constant during execution.  This type is declared in windef.h as follows:  #define CONST const

DWORD32

信息

SSIZE_T

STD_ERROR_HANDLE – Handle to the standard error device.

hObject – [in, out] Handle to an open object.

hHandle – [in] 要重定向给专业配备的对象的句柄。

Table 2: Fixed precision data types

LPCVOID

Pointer to a DWORD_PTR.  This type is declared in basetsd.h as follows: typedef DWORD_PTR *PDWORD_PTR;

反倒的,应用程序必须先得到一个目的的句柄,应用程序那一个句柄来访问、检查和修改系统资源。

Description

概念语法:

 

#if defined(_WIN64)

POINTER_64

char fname[30] = “c:\\testfile.txt”;

Pointer to a ULONG.  This type is declared in windef.h as follows: typedef ULONG *PULONG;

STD_OUTPUT_HANDLE – Handle to the standard output device. Initially, this is a handle to the active console screen buffer, CONOUT$.

These handles can be used by the ReadFile() and WriteFile() functions, or by any of the console functions that access the console input buffer or a screen buffer, for example, theReadConsoleInput(), WriteConsole(), or GetConsoleScreenBufferInfo() functions.

 

_WIN32_IE >= 0x0560

LPINT

Windows 95

HANDLE_FLAG_PROTECT_FROM_CLOSE – If this flag is set, calling the CloseHandle() function will not close the object handle.

当您的函数调用会重临一个分外首要的值的时候,你应该立刻调用GetLastError()函数来博取函数的回来状态,那是因为部分函数在中标执行时会调用SetLastError函数来设定函数错误状态全局存储空间,那样就会覆盖最终调用失利的函数的错误代码。(注: 就是为了以防万一错误代码在被使用以前改变,最好在调用首要函数之后马上调用一下GetLastError函数获取函数执行意况的新闻)

HSZ

UCHAR

动态数据沟通对象句柄。

Pointer to a bool.  This type is declared in windef.h as follows: typedef BOOL *LPBOOL;

_WIN32_IE >= 0x0600

 

A sample output:

    typedef HANDLE HFONT;

Access token, Change notification, Communications device, Console input, Console screen buffer, Desktop, Event, Event log, File, File mapping, Heap, Job, Mailslot, Module, Mutex, Pipe, Process, Semaphore, Socket, Thread, Timer, Timer queue, Window station, Update resource, Timer-queue timer.

Information

Language identifier.  This type is declared in winnt.h as follows: typedef WORD LANGID;

Table 1: Windows data types.

HCONV

Unsigned HALF_PTR.

Handle to an internal drop structure.  This type is declared in shellapi.h as follows:  typedef HANDLE HDROP;

说明

Windows XP

GetHandleInformation函数的利用方法

hFile = CreateFile(fname,                       // file to be opened

#else

函数原型

dwOptions – [in]: 可选参数。 那么些参数可以设置为0,或者是底下预约义宏的组合值(注: 位旗标的 或运算结果)

在一切进程上校不再额外地叙述windows文件系统和储存的有关的基础知识。

dwDesiredAccess – [in] Access requested for the new handle.  For the flags that can be specified for each object type. This parameter is ignored if the dwOptions parameter specifies the DUPLICATE_SAME_ACCESS flag.  Otherwise, the flags that can be specified depend on the type of object whose handle is to be duplicated.

 

The header file

64-bit signed integer

UINT_PTR

  假诺函数执行破产,再次来到值是 INVALID_HANDLE_VALUE, 若要拿走越多的错误音信,可以调用GetLastError函数。

typedef LPCSTR PCTSTR;

hHandle – [in] Handle to set to the specified device.

        typedef HANDLE HBRUSH;

当指针精度/指针长度改变,那几个数据类型的长度就自行改变(当在32位windows时这几个数据类型位32位,在64位windows时是64位长度);因而在将指针转化为那么些数据类型后举行数量运算是安全的,当指针精度是64位时,转化后的数据类型也是64位的。计数器类型同样影响一个指南针能引用的最大数目大幅度。下表例举了有些指针长度类型和计数器类类型。

   // standard input handle

水彩数据类型

函数

The maximum number of bytes to which a pointer can refer.  Use for a count that must span the full range of a pointer.

For example, the current file mark for a file handle is always the same for both handles.

Unsigned CHAR.  This type is declared in windef.h as follows: typedef unsigned char UCHAR;

   提示关闭源对象句柄,表示不管是或不是暴发错误,都不再次回到值。

DWORD64

BOOL DuplicateHandle( HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lpTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions );

accelerator table.

TCHAR

PULONGLONG

     typedef HANDLE HBITMAP;

Calling convention for system functions.  This type is declared in windef.h as follows:  #define WINAPI __stdcall

 

typedef HANDLE HDC;

PCWSTR

PULONG64

_WIN32_WINNT >= 0x0400

Note that DuplicateHandle() should not be used to duplicate handles to I/O completion ports. In this case, no error is returned, but the duplicate handle cannot be used.

Handle to an icon.  This type is declared in windef.h as follows: typedef HANDLE HICON;

if(WINVER >= 0x0500)

SetHandleInformation()

Windows System Error Codes

#define POINTER_32 __ptr32

Certain functions that depend on a particular version of Windows are declared using conditional code.  This enables you to use the compiler to detect whether your application uses functions that are not supported on its target version(s) of Windows.

The following table indicates the common macros you must define to target each major operating system release.

 

   NULL);                     // no attribute template

LPTSTR

概念语法:

函数原型

句柄

一经函数执行破产,那么将赶回0. 倘使急需获得越多的错误音讯,可以调用GetLastError函数。

Because of the update issue and the various Windows OS versions, using the same Windows header file doesn’t mean you will be provided with the same functionalities.  This issue will be solved by using macros.

回去错误代码的函数不是WindowsAPI的一片段,并且函数的重返值可能随操作系统的改变如故硬件设备差别而更改。 由于那么些原因,那么些函数的相干文档并不曾罗列这么些函数应该回到什么值。

 

PLONG64

HGDIOBJ

概念语法:

#ifdef UNICODE

In Windows, system provides three categories of objects: user, graphics device interface (GDI), and kernel.

   // normal file archive and impersonate client

HBITMAP

   printf(“Waiting data from standard input:\n”);

注:从此处能够观察,微软通过宏定义来支配版本音信

typedef unsigned __int64 ULONGLONG;

若果函数执行破产,那么将重临0. 如果必要获得越多的错误音信,可以调用GetLastError函数。

 

Unsigned LONG_PTR.

Description

Closes an open object handle.

字体对象句柄。在头文件windef中定义,

WINVER >= 0x0500

LCID

 

 

 

16-bit unsigned integer.  This type is declared in windef.h as follows: typedef unsigned short WORD;

Handles refer to a resource that has been loaded into memory and will be discussed in another Module.

UINT

If the function fails, the return value is INVALID_HANDLE_VALUE.  To get extended error information, call GetLastError().

回调函数标识

 

Microsoft Visual C++ includes copies of the Windows header files that were current at the time Visual C++ was released.  Therefore, if you install updated header files from an SDK, you may end up with multiple versions of the Windows header files on your computer.

#if defined(_WIN64)

挂号表项件句柄,在头文件windef中定义。

64-bit unsigned integer.  This type is declared in winnt.h as follows:

This type is declared in winnt.h as follows:

File’s HANDLE is OK!

概念语法:

 

hSourceProcessHandle – [in] Handle to the process with the handle to duplicate. The handle must have the PROCESS_DUP_HANDLE access right.

宏定义

#else

ULONG

hSourceHandle – [in] Handle to duplicate.  This is an open object handle that is valid in the context of the source process.

Byte (8 bits).  This type is declared in windef.h as follows: typedef unsigned char BYTE;

被微软windows平台支持的数据类型用阿里定义:函数的重返值、函数和新闻参数、结构体的协会成员和便面。 Windows数据类型定义那些因素的轻重和含义信息。

HGLOBAL

 

GetCurrentProcess(),      // process’s handle to be duplicated

PLONGLONG

Handle to a menu.  This type is declared in windef.h as follows: typedef HANDLE HMENU;

Most of the pointer-type names begin with a prefix of P or LP (long pointer) and handle with H.

1、 用户对象来支持窗口管理。

DWORD lpdwFlags[100];

HMENU

32位指针,在32位系统中,是缺司长度指针,而在64位系统,是一个64位指针经系统截取后的指针。

These functions used to deal with volumes, disks, directories (including paths) and files management.  The file system used in the discussion is NTFS.

Description

Handle to a desktop.  This type is declared in windef.h as follows:

Windows Me

概念语法:

#ifdef UNICODE

PCSTR

描述/解释

全局内存块对象句柄,在头文件windef中定义。

#ifdef UNICODE

加快器表句柄,在windef头文件中定义。

 

下边是一个关于收集句柄音讯的示范。 表中罗列了利用GetHandleInformation函数所急需的音讯。

#include <stdio.h>

LPCSTR

_WIN32_WINNT >= 0x0502

系统选拔:

   HANDLE hStdin, hStdout;

HANDLE

hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

Well, we have so many data types here :o).

LRESULT

一样存在呈现提议数据位宽的新的指针类型。当在64位代码中行使那一个数据类型的时候要小心:借使您声贝拉米(Bellamy)(贝拉米(Bellamy))个32位长度的指针变量,操作系统将自行截取为32位的指针。 记住在64位系统中具备的指针变量都是64位长度/位宽。

GetHandleInformation().

The parameters

 

 

1、DUPLICATE_CLOSE_SOURCE 

Pointer to a null-terminated string of 16-bit Unicode characters.  This type is declared in winnt.h as follows:  typedef WCHAR *LPWSTR;

LPSTR

 

HHOOK

 

Pointer to a null-terminated string of 8-bit Windows (ANSI) characters.  This type is declared in winnt.h as follows:  typedef CHAR *PSTR;

 

Pointer to a UCHAR.  This type is declared in windef.h as follows: typedef UCHAR *PUCHAR;

           typedef  WORD  ATOM;

   提出要设定的是正式输入设备。

For Visual C++ 7.0:  To specify compiler options, go to the Projects menu and click Properties.

BOOL CloseHandle(HANDLE hObject);

Signed integral type for pointer precision.  Use when casting a pointer to an integer to perform pointer arithmetic.  This type is declared in basetsd.h as follows:

#else

typedef char TCHAR;

VOID

FLOAT

hFile = CreateFile(…);

HANDLE hStdout;

// handle for file

桌面对象句柄

_WIN32_WINNT >= 0x0501

Pointer to a SIZE_T.  This type is declared in basetsd.h as follows: typedef SIZE_T *PSIZE_T;

HACCEL

This type is declared in winnt.h as follows:

An LPCWSTR if UNICODE is defined, an LPCSTR otherwise.

Handle to a service status value.  This type is declared in winsvc.h as follows:

函数原型

32-bit unsigned integer.  This type is declared in windef.h as follows:

If the standard handles have been redirected, you can specify the CONIN$ value in a call to the CreateFile() function to get a handle to a console’s input buffer.  Similarly, you can specify the CONOUT$ value to get a handle to a console’s active screen buffer.

原子类型,在windef.h 头文件定义。

If you are defining an error code for your application, set this bit to one.  That indicates that the error code has been defined by an application, and ensures that your error code does not conflict with any error codes defined by the system.

HMETAFILE

PINT

BOOL success = SetStdHandle(STD_OUTPUT_HANDLE, hStdout);

 

 

PUINT64

定精度数据在32位依旧64位windows中享有同样的多寡位宽度。为了方便记念,这个数据的精度(注:数据小幅)是数据类型的一部分。下表例举了定精度的数据类型:

                NULL,                                         // default security

Return code used by interfaces.   It is zero upon success and nonzero to represent an error code or status information.  This type is declared in winnt.h as follows:

比如,一个历程可以选用DuplicateHandle函数创造一个可继承对象句柄的复制对象句柄,或者成立一个与原句柄对象访问权限不平等的经过。

As an example for information collection, the following Table lists the needed information in order to use the GetHandleInformation() function.

Handle to a resource.  This type is declared in windef.h as follows: typedef HANDLE HRSRC;

概念语法:

Use the information to build a simple working program.

#else

The prototype

Calling convention for callback functions.  This type is declared in windef.h as follows:  #define CALLBACK __stdcall

 

Type

Pointer to a HANDLE.  This type is declared in winnt.h as follows: typedef HANDLE *PHANDLE;

 

细微系统须要

       // write to standard output, console.

接下去大家将学习Win32 API中有关文件系统管理的连锁内容,大家将尝试收集相关的音信,并且尝试创设大家和好的实例应用程序实体。

typedef unsigned __int64 UINT_PTR;

PULONG

PULONG32

INT32

 

32-bit signed integer

POINTER_64

概念语法:

    提出要设定的是专业错误输出设备

typedef HANDLE HCOLORSPACE;

typedef double LONGLONG;

printf(“The return value is %d, error %d\n”, test, GetLastError());

Floating-point variable.  This type is declared in windef.h as follows: typedef float FLOAT;

Handle to an instance.  This type is declared in windef.h as follows: typedef HANDLE HINSTANCE;

Pointer to an int.  This type is declared in windef.h as follows: typedef int *LPINT;

上面的例举了一部分与句柄和对象使用相关的函数

概念语法:

  NULL,                                      // default security

Information

示例

你可以在每一个源文件文件的尾部用#define预处理指令来定义这几个标记(那里指: 宏),或者经过VC++ IDE环境扶助的 /D 的编译器选项来支撑那宏扩大效率。

A WCHAR if UNICODE is defined, a CHAR otherwise.  This type is declared in winnt.h as follows:

typedef HANDLE HGDIOBJ;

64-bit unsigned integer

Pointer to an HKEY.  This type is declared in windef.h as follows: typedef HKEY *PHKEY;

图标句柄,在头文件windef中定义。

对此VC++ 6.0, 为了设置编译器编译选项,那么通过 工程——》设置 打开设置对话框,然后选择C/C++标签页举行安装。

作用

32位无符号整型。

重定向标准输入输出设备

PWCHAR

LPBOOL

HRESULT

Hook钩子对象句柄,在头文件windef中定义。

为了在一个应用程序中应用这个函数,你必须定义合适的宏。否则你将会看出编译器报C2065不当。上面的表提出了你必须定义的来适合您的操作系统公布的根本版本号通用宏。

字节类型,8位数据大幅度。 在头文件windef中定义。

32-bit signed integer.  This type is declared in windef.h as follows: typedef int INT;

HPEN

概念语法:

Signed SIZE_T.  This type is declared in basetsd.h as follows: typedef LONG_PTR SSIZE_T;

Definition

typedef HANDLE HLOCAL;

布尔类型

A 64-bit pointer. On 64-bit Windows, this is a native pointer.  On 32-bit Windows, this is a sign-extended 32-bit pointer.  Note that it is not safe to assume the state of the high pointer bit.

CloseHandle(hFile);

      printf(“DuplicateHandle() failed\n”);

32-bit signed integer.  This type is declared in basetsd.h as follows: typedef signed int LONG32;

Pointer to a TCHAR.  This type is declared in winnt.h as follows: typedef TCHAR *PTCHAR;

8位的ANSI字符类型,在头文件winnt.h中定义。

在Windows Server 2003、Windows XP/2000,这些参数还能是控制台输入缓存或者控制台显示器缓存。

STD_ERROR_HANDLE – Handle to the standard error device. Initially, this is a handle to the active console screen buffer,CONOUT$.

Table 12:  SetStdHandle() information.

Pointer to a DWORD64.  This type is declared in basetsd.h as follows: typedef DWORD64 *PDWORD64;

printf(“File’s HANDLE is OK!\n”);

Type

DWORD_PTR

This Module will try to follow the same steps:

LONG32

HFONT

bInheritHandle – [in] Indicates whether the handle is inheritable.  If TRUE, the duplicate handle can be inherited by new processes created by the target process. If FALSE, the new handle cannot be inherited.

 

Pointer to a BYTE.  This type is declared in windef.h as follows: typedef BYTE *PBYTE;

_WIN32_IE >= 0x0401

UINT32

LPARAM

BOOL SetStdHandle(DWORD nStdHandle, HANDLE hHandle);

The function

      typedef float FLOAT;

设置句柄新闻

HKL

Pointer to a ULONGLONG.  This type is declared in windef.h as follows: typedef ULONGLONG *PULONGLONG;

SHORT

typedef HANDLE HKL;

Pointer to a UINT32.  This type is declared in basetsd.h as follows: typedef UINT32 *PUINT32;

头文件:  windows.h

Multiple Versions of Windows Header Files

Half the size of a pointer.  Use within a structure that contains a pointer and two small fields.

  提出再次回到标准输入设备的句柄, 常常那个句柄是一个针对控制台输入缓冲区CONIN$ 的句柄。

Pointer to a DWORD.  This type is declared in windef.h as follows: typedef DWORD *PDWORD;

一旦函数执行成功,重返值是非零。

PUINT_PTR

 

Description

For example, a file handle created with the GENERIC_READ access right cannot be duplicated so that it has both the GENERIC_READ and GENERIC_WRITE access right.

In some cases, the new handle can have more access rights than the original handle.  However, in other cases, DuplicateHandle() cannot create a handle with more access rights than the original.

BOOLEAN

The following Table lists the required information in order to use the SetStdHandle() function.

按照上边表格描述的新闻,上边的代码示例浮现了何等选择GetHandleInformation函数和哪些获取一个文本对象的句柄。

Pointer to a null- terminated string of 16-bit Unicode characters.  This type is declared in winnt.h as follows:  typedef WCHAR *PWSTR;

Pointer to a UINT64.  This type is declared in basetsd.h as follows: typedef UINT64 *PUINT64;

Handle to a deferred window position structure.  This type is declared in winuser.h as follows:  typedef HANDLE HDWP;

_WIN32_IE >= 0x0501

Keyword

The system uses:

函数的原型

If the function succeeds, the return value is nonzero.

概念语法:

If the function fails, the return value is zero. To get extended error information, call GetLastError().

CloseHandle().

LPVOID

(注: 也就是说用户可以设置D29这一位来提示用户须求定义的荒唐类型)

 

HANDLE_FLAG_INHERIT:  如若这些设置了那个位旗标,那么表示通过CreateProcess函数创建的子进度对象将三番五次父进度的靶子句柄的特点。

Locale information type.  This type is declared in winnls.h as follows: typedef DWORD LCTYPE;

光标句柄,在头文件windef中定义。

Unsigned INT32.  This type is declared in basetsd.h as follows: typedef unsigned int UINT32;

typedef HANDLE SERVICE_STATUS_HANDLE;

1、STD_INPUT_HANDLE

 

Information

typedef __int64 LONG_PTR;

The return value

示范代码

       accelerator table.

UINT_PTR

GetStdHandle函数可以在急需读写控制台的时候回来控制台句柄。

Press any key to continue

64位无符号整型,在basetsd.h头文件中定义

Handle to a display monitor.   This type is declared in windef.h as follows:

 

Table 7:  Handle and object functions.

鉴于windows操作系统的本子不断的翻新,当你在不一致的windows版本下使用同一的头文件和一致的Win32 API函数名时可能会促成差其余函数成效,这个函数在少数版本上也许会使用宏完结(注:这里在VC++ 里面与库的贯彻相关,至于在调用进度中是调用宏照旧调用函数,请查询库的有关兑现文档)

Error codes are 32-bit values (bit 31 is the most significant bit).  Bit 29 is reserved for application-defined error codes; no system error code has this bit set.

The data types supported by Microsoft Windows are used to define function return values, function and message parameters, structure members and variables.  They define thesize and meaning of these elements.

hObject – [in] Handle to an object whose information is to be retrieved.  You can specify a handle to one of the following types of objects: access token, event, file, file mapping, job, mailslot, mutex, pipe, printer, process, registry key, semaphore, serial communication device, socket, thread, or waitable timer.

概念语法:

DUPLICATE_SAME_ACCESS);  // same access as the source handle

Internet Explorer 5.01, 5.5

假设这些函数成功进行,那么重回值是一个非零值。

typedef LPCWSTR PCTSTR;

Handle to a region.  This type is declared in windef.h as follows: typedef HANDLE HRGN;

Pointer to a LONG64.  This type is declared in basetsd.h as follows: typedef LONG64 *PLONG64;

The use

布尔型变量(变量取值: TRUE和FALSE), 在头文件windef.h里面定义。

#else

 

双字类型指针

3、STD_ERROR_HANDLE

 

Internet Explorer 3.0, 3.01, 3.02

 

USN

CALLBACK

PTSTR

   return 0;

INT

typedef unsigned int UINT_PTR;

PINT32

 

 

HDC

 

ULONG32

          break;

     typedef  DWORD COLORREF;

User objects to support window management.

HCOLORSPACE

Handle to a font.  This type is declared in windef.h as follows: typedef HANDLE HFONT;

 

 

Press any key to continue

hObject参数, 输入/输出参数, 指向一个开辟的对象的句柄。

nStdHandle – [in] Standard device for which the handle to be set.  This parameter can be one of the following values:

 

少数依赖于特定的windows版本的函数使用规则编译代码来进行宣示;那样有限支撑你的编译器能检测你的代码中是或不是了选择了对象Windows系统不支持的函数。

          typedef char CHAR;

        typedef HANDLE HGDIOBJ;   

概念语法:

复制句柄函数的有关音讯。

typedef long LONG_PTR;

  提出重临的是明媒正娶输出设备的句柄,平常这几个句柄是一个针对性当前激活控制台窗口缓冲区 CONOUT$的句柄。

下表例举了windows对象的类型,并且在这一节我们将探究一些关于基本对象的始末。

#if defined(_WIN64)

If you have noticed, many types actually are derived from the basic types with new name using the typedef or #define and some are specific for the graphic functions.

    typedef PVOID HANDLE;

INT_PTR

概念语法:

                   // not inherited

Pointer to a UINT_PTR.  This type is declared in basetsd.h as follows: typedef UINT_PTR *PUINT_PTR;

LPBYTE

If the function fails, the return value is zero.  To get extended error information, call GetLastError().

                GENERIC_WRITE,                  // open for writing

Description

DWORD

概念语法:

Macros to define

表5 不一致的windows操作系统和不一样版本的种类可以里分裂的宏定义

以身作则代码

如若函数执行成功,重回值是非零。

HINSTANCE

   提出要设定的装备是业内输出设备 

ULONG64

   // just exit

动态数据沟通对象列表句柄

PWORD

Individual header files may use different macros; therefore, if header files related compilation problems occur, check the header file that contains the definition for conditional definitions directly.

HDROP

PLONG

Pointer to a TBYTE.  This type is declared in winnt.h as follows: typedef TBYTE *PTBYTE;

Handle to DDE data.  This type is declared in ddeml.h as follows:

 

在Windows下,对象就是一个结构体,它标志系统资源,例如文件、线程、图像等。由此在Windows下大家处理的是目的。

复制对象句柄和原句柄一样可以用来做客对象。因此,能够通过复制对象句柄和原句柄来访问对象。例如the current file mark for a file handle is always the same for both handles.  //那句有点没看精晓。

The parameters

接下去大家会经过一样的情势和步子来演示如何建立一个足以运作的主次:

return 0;

if(WINVER >= 0x0400)

if(!fSuccess)

HCONVLIST

概念语法:

头文件

PBOOL

PDWORD32

The function

位图对象句柄,在windef头文件中定义。

typedef HANDLE HDESK;

安装某个句柄的习性

Message parameter.  This type is declared in windef.h as follows: typedef LONG_PTR LPARAM;

 

                CREATE_ALWAYS,                // create new file only

     #difine  CALLBACK __stdcall

形参

那么些API使用分歧的数据类型,允许你用相同份代码建立可以在32位和64位版本windows下运作的顺序。(注:通过数据类型增添应用程序的利用范围,就是数据类型)

STD_OUTPUT_HANDLE – Handle to the standard output device.

typedef HANDLE HGLOBAL;

Handle to a service control manager database.  This type is declared in winsvc.h as follows:  typedef HANDLE SC_HANDLE;

}

         typedef unsigned long DWORD;

   {

If the function fails, the return value is zero.  To get extended error information, call GetLastError().

if(!success)

LPHANDLE

   typedef HANDLE HDDEDATA; 

typedef int INT_PTR;

概念语法:

#else

应用程序可以使用MulDiv()函数在几遍运算进程中落到实处32位数据的乘法和除法操作。纵然那么些函数的重返值是一个32位的值,可是因为在函数内部使用的是64位数据开展测算,因而在计算超过32位长度的数值是不会丢掉数据精度。

Internet Explorer 6.0

typedef CONST void *LPCVOID;

Header files for the Windows API enable you to create 32- and 64-bit applications that run on various Microsoft Windows versions.

HANDLE hStdout;

HRSRC

<windows.h>

Unsigned LONG32

 

If an application does not have associated standard handles, such as a service running on an interactive desktop, and has not redirected them, the return value is NULL.

32-bit unsigned integer.  This type is declared in basetsd.h as follows:

int main()

  提议函数重回的是业内错误输出设备的句柄, 平常这些句柄是一个针对当前激活的操纵台窗口缓冲区CONOUT$的句柄。

DWORD32

HWINSTA

概念语法:

32位无符号整型,在头文件basetsd.h中定义。

动态调换数据句柄

绝半数以上函数会在举行破产之后设定其推行线程的谬误代码值,只有小一些的函数会在履行成功时设置错误代码值。

If you do not sure that you are using the latest version of the SDK header files, you will receive the following error code when compiling code that uses features that were introduced after Visual C++ was released: error C2065: undeclared identifier.

ULONGLONG

WINVER >= 0x0410

LONG64

Table 6:  Windows object categories.

闭馆一个打开对象的句柄/ 打消一个对象句柄

HALF_PTR

Internet Explorer 4.0

HANDLE GetStdHandle(DWORD nStdHandle);

Handle to a file opened by OpenFile(), not CreateFile().  This type is declared in windef.h as follows:  typedef int HFILE;

 

Signed long type for pointer precision.  Use when casting a pointer to a long to perform pointer arithmetic.  This type is declared in basetsd.h as follows:

    typedef HANDLE HICON;   

桌面对象句柄,在头文件windef中定义。

INT64

typedef HICON HCURSOR;

typedef LPSTR PTSTR;

浮点型变量类型,在windef.h中定义。

PSTR

DWORD lpdwFlags[100];

UINT32

INT64

Handle to a metafile.  This type is declared in windef.h as follows: typedef HANDLE HMETAFILE;

PHANDLE

typedef LONG HRESULT;

Windows NT 4.0

typedef HANDLE HENHMETAFILE;

 

The parameters

2、STD_OUTPUT_HANDLE

Example

复制句柄

#if defined(_WIN64)

经过函数OpenFile打开的文本的句柄,不是CreateFile函数创设的文本句柄。在头文件windef中定义。

 

typedef HANDLE HCONVLIST;

    typedef HANDLE HCONVLIST;

      #define CONST const

}

UINT64

   if((hStdout == INVALID_HANDLE_VALUE) || (hStdin == INVALID_HANDLE_VALUE))

exit(1);

Large Integers

Similarly, you can specify the CONOUT$ value to get a handle to the console’s active screen buffer.

A sample output:

–EOF to end–

概念语法:

 

Pointer to a WORD.  This type is declared in windef.h as follows: typedef WORD *PWORD;

   printf(“–EOF to end–\n”);

If the function succeeds, the return value is nonzero.

LONG32

  CREATE_ALWAYS,             // create new file only

           typedef HANDLE HCOLORSPACE;

Locale identifier.  This type is declared in winnt.h as follows: typedef DWORD LCID;

 

当控制台被创立后,标准输入设备句柄是一个针对性标准输入缓存区的句柄,标准输出设备句柄和标准错误输出设备句柄是一个对准控制台窗口缓冲区的句柄。

函数原型

HCURSOR

typedef WCHAR TCHAR;

定精度数据

HANDLE hStdinRd, hStdinWrDup;

SIZE_T

 

PSHORT

概念语法:

typedef LPWSTR PTSTR;

if(hFile == INVALID_HANDLE_VALUE)

#ifdef UNICODE

      typedef HANDLE HENHMETAFILE;

Short integer (16 bits).  This type is declared in winnt.h as follows: typedef short SHORT;

Pointer to a ULONG32.  This type is declared in basetsd.h as follows: typedef ULONG32 *PULONG32;

 

万一你必要自定义应用程序的错误代码,那么您可以设置D29这一位; 那就注解函数重返的错误代码已经被应用程序重定义过,你不可以不确保应用程序自定义的错误代码不与系统定义的缺省错误代码争辩。

回到一个目的句柄的性质消息

走访信令、控制台输入、控制台缓存、桌面、事件、事件日志、文件、文件映像文件、堆、作业、模块、互斥对象、管道、进度、套接字、线程、定时器、定时器队列、

#else

Fixed-precision data types are the same length in both 32- and 64-bit Windows. To help you remember this, their precision is part of the name of the data type.  The following are the fixed-precision data types.

Specific Pointer-Precision Types

长双字类型

#include <windows.h>

水彩空间定义

PBOOLEAN

 

Handle to a registry key.  This type is declared in windef.h as follows: typedef HANDLE HKEY;

ULONG32

一个关于CloseHandle的以身作则和有关的新闻。

32-bit signed integer.  This type is declared in basetsd.h as follows: typedef signed int INT32;

Pointer to a BYTE.  This type is declared in windef.h as follows: typedef BYTE *LPBYTE;

CloseHandle()

表示变量的值在运行时期只读的修饰符,在windef.h头文件中宣称。

SSIZE_T

Handle to a DDE conversation list.  This type is declared in ddeml.h as follows:

typedef HANDLE HPALETTE;

 

#ifdef UNICODE

If the function fails, the return value is zero.  To get extended error information, call GetLastError().

POINTER_32

似乎的还足以指定CONNOUT$值来得到指向当前激活的操纵台窗口缓冲区的句柄。

下表描述了DuplicateHandle函数的画龙点睛新闻和什么利用DuplicateHandle函数。

typedef WCHAR TBYTE;

Pointer to a LONGLONG.  This type is declared in winnt.h as follows: typedef LONGLONG *PLONGLONG;

If the function succeeds, the return value is nonzero.

 

LPLONG

Windows 98

The parameters

PUINT

句柄和目的函数

The prototype

Unsigned long type for pointer precision.

 

Sets certain properties of an object handle.

动态互换数据句柄,在头文件ddeml中定义。

<windows.h>

     typedef HANDLE HKEY;

typedef ULONGLONG DWORDLONG;

If the standard handles have been redirected, you can specify the CONIN$ value in a call to the CreateFile() function to get a handle to a console’s input buffer.

64-bit signed integer.  This type is declared in winnt.h as follows:

_WIN32_WINDOWS >= 0x0400

Retrieves certain properties of an object handle.

Handle to a device context (DC).  This type is declared in windef.h as follows:

        typedef unsigned int DWORD32;

 

Handles returned by GetStdHandle() can be used by applications that need to read from or write to the console.

You should call the GetLastError() function immediately when a function’s return value indicates that such a call will return useful data.  That is because some functions call SetLastError() with a zero when they succeed, wiping out the error code set by the most recently failed function.

   typedef HANDLE HDESK;

typedef unsigned __int64 DWORD64;

The use

&hStdinWrDup,                // pointer to variable for duplicated handle process receiver

 

     typedef HANDLE HKL;

 

基于红、绿、蓝三本色(RGB)定义的数据结构,32为多少位宽度。在windef.h头文件中定义。

Handle to a pen.  This type is declared in windef.h as follows: typedef HANDLE HPEN;

每一句柄在系统保证的系统资源表中都对应一个入口点。那个入口点音信包蕴资源的地方(是内存地址吗?)并且它还提醒出资源的品类。

 

The error codes returned by a function are not part of the Windows API specification and can vary by operating system or device driver.  For this reason, there are functions whose documentation does not include a list of error codes that can be returned.

注意DuplicateHandle函数不可能用来复制完整的I/O端口对象句柄。那种情形下,将不会回去错误,可是复制对象句柄不可以动用。

 

HBRUSH

一个历程的正式句柄也许会通过调用SetStdHandle句柄来展开重定向, 这种意况下得以经过GetStdHandle函数重回重定向后的指针。假诺标准句柄被重定向后,你可以在调用CreateFile函数时传递CONIN$变量来取得控制台输入缓冲区的句柄。 类似的,你可以指定CONOUT$值来获得一个针对活动的控制台窗口缓冲区的句柄。

GetHandleInformation(hFile, lpdwFlags);

dwDesiredAccess – [in] :复制对象句柄的拜会权限限制,这一个参数位旗标可以本着每个对象类型指定。 若是dwOptions参数设置成DUPLICATE_SAME_ACCESS, 那么这些参数的安装将被忽视。 同时这些参数的装置还与要源对象句柄的品类有关。

 

64位无符号整型,在winnt.h 头文件中定义。

int main()

LPWORD

Fixed Precision

The following is a sample output run using VC++ Express Edition on Win XP Pro SP2 with Windows SDK.

typedef unsigned long DWORD;

Then redirected to standard output…

 

 

 

 

Waiting data from standard input:

_WIN32_WINNT >= 0x0500

概念语法:

Unsigned long type for pointer precision. Use when casting a pointer to a long type to perform pointer arithmetic.  Also commonly used for general 32-bit parameters that have been extended to 64 bits in 64-bit Windows.  This type is declared in basetsd.h as follows:  typedef ULONG_PTR DWORD_PTR;精确指针Unsigned long类型,平常在将一个指针类型转换为长整型数据类型时接纳。经常在64位windows里面将32位参数扩大位64位是利用,在头文件basetsd.h中定义。

描述

概念语法:

PFLOAT

Table 11:  GetStdHandle() information.

Lock to a service control manager database.  This type is declared in winsvc.h as follows:  typedef LPVOID SC_LOCK;

For example, a process can use DuplicateHandle() to create a non-inheritable duplicate of an inheritable handle, or a handle with different access than the original handle.

Function failure is typically indicated by a return value error code such as zero, NULL, or –1.  Some functions call SetLastError() under conditions of success.

DWORDLONG

增强型metafile对象句柄,在头文件windef中定义。

Pointer to a WCHAR.  This type is declared in winnt.h as follows: typedef WCHAR *PWCHAR;

HICON

There are also new pointer types that explicitly size the pointer.  Be cautious when using pointers in 64-bit code: If you declare the pointer using a 32-bit type, the operating system creates the pointer by truncating a 64-bit pointer.  All pointers are 64 bits on 64-bit Windows.

HFILE

For example, the GetDllDirectory() function was introduced in Windows Server 2003 and is conditionally defined if _WIN32_WINNT is 0x0502 or greater.  This function was also added to Windows XP SP1.  Therefore, if you were to define _WIN32_WINNT 0x0501 to target Windows XP, you would miss features that are defined in Windows XP SP1.

GDI objects to support graphics, and  Kernel objects to support memory management, process execution, and interprocess communications (IPC).

hTargetProcessHandle – [in]  用来囤积目的复制句柄的进程对象句柄,那几个历程句柄必须有所:PROCESS_DUP_HANDLE 访问权限。

概念语法:

The header file

 

Table 10:  DuplicateHandle() information.

Handle to a local memory block.  This type is declared in windef.h as follows:

应用程序不可能直接访问对象的数目依然系统资源对象。

 

概念语法:

BOOL

The following Tables are the list of the Windows object categories and in this Tutorial we will focus on some of the kernel objects。

The prototype

WINVER >= 0x0501

Table 5:  Macros for different Windows header file versions and different Windows OS.

A PWSTR if UNICODE is defined, a PSTR otherwise.  This type is declared in winnt.h as follows:

   // standard output handle

Information

   typedef HANDLE HMETAFILE;

CONST

SC_LOCK

             Typedef BYTE BOOLEAN;

Internet Explorer 5.0, 5.0a, 5.0b

Table 9:  CloseHandle() information.

The function

 

Internet Explorer 5.6

要是函数执行破产,那么将回来0. 即使急需取得越多的错误音信,可以调用GetLastError函数。

#else

PDWORD64

HDDEDATA

在Visual C++包罗它被发表时的windows API相关的头文件。因而当您用一个SDK开发包升级你的Visual C++时,你也许会赶上许多例外版本的windows API相关的头文件。

                NULL);                                         // no attr. template

INT32

lpTargetHandle – [out] Pointer to a variable that receives the duplicate handle. This handle value is valid in the context of the target process. If hSourceHandle is a pseudo handle returned by GetCurrentProcess() or GetCurrentThread(), DuplicateHandle() converts it to a real handle to a process or thread, respectively. If lpTargetHandle is NULL, the function duplicates the handle, but does not return the duplicate handle value to the caller. This behavior exists only for backward compatibility with previous versions of this function. You should not use this feature, as you will lose system resources until the target process terminates.

PCTSTR

LANGID

Pointer to a SSIZE_T.  This type is declared in basetsd.h as follows: typedef SSIZE_T *PSSIZE_T;

WINVER >= 0x0500

HMODULE

#include <windows.h>

Handle to a color space.  This type is declared in windef.h as follows:

Signed result of message processing.  This type is declared in windef.h as follows: typedef LONG_PTR LRESULT;

PDWORDLONG

Unsigned INT64.  This type is declared in basetsd.h as follows: typedef unsigned __int 64 UINT64;

#ACCESS,ifdef UNICODE

LONG_PTR

  GENERIC_WRITE,                // open for writing

Each handle has an entry in an internally maintained table.  These entries contain the addresses of the resources (memory addresses?) and the means to identify the resource type.

 

 

 

Windows系统错误代码

        typedef ULONGLONG DWORDLONG;

 

#else

Signed integral type for pointer precision.

一部分在高版本Windows的风味可以透过SP升级补丁的在低版本的Windows中利用,由此对此一个SP升级包可能必要定义 _WIN32_WINNT 宏来适应下一个发布版的Windows主版本号。

参数

      typedef HANDLE HMENU;    

nStdHandle – [in]:提议将要再次回到那多少个标准配备的句柄值,这些参数可以取上边多少个宏中的一个:

若果函数执行破产,那么将回来0. 倘诺急需得到更加多的错误音信,可以调用GetLastError函数。

The standard handles of a process may have been redirected by a call to SetStdHandle(), in which case GetStdHandle() will return the redirected handle.

The header file

BOOL test = GetHandleInformation(hFile, lpdwFlags);

Unsigned LONG64

卓绝的指令函数执行错误的再次回到值是例如0、NULL或-1. 一些函数会在功成名就将来调用SetLastError函数;错误代码是一个32位的重返值(D31 位尤其关键)。D29位是为应用程序自定义错误代码保留的, 系统错误代码不会设置D29这一位。

PDWORD

typedef char CHAR;

Pointer to a CHAR.  This type is declared in winnt.h as follows: typedef CHAR *PCHAR;

POINTER_32

嗯哦,在windows环境下边有太多的数据类型, :o).

WORD

lpTargetHandle – [out],接收复制对象句柄的句柄指针,这几个句柄值在复制句柄所在的历程中是立竿见影的。 如若hSourceHandle句柄是一个通过GetCurrentProcess函数、GetCurrentThread函数重回的虚对象句柄,那么Duplicatehandle函数就将他转移为一个针对进度或者线程的实对象句柄。 假若传递给复制对象句柄指针lpTargetHandle是一个NULL值,那么DuplicateHandle函数依旧复制对象句柄,不过不会将对象句柄重回给调用他的函数空间里面。那种气象只在为了向后非常的动静线存在;你不该选用那个特性,否则你将会丢掉一些系统资源,直到目的经过终止。(注: 那里资源回收需求应用程序和系统一同爱护)

TBYTE

   指示忽略dwDesiredAccess参数的设定,而指定复制对象句柄也源对象句柄具有相同的访问权限。

概念语法:

 

设施的内容句柄,在头文件windef中定义。

CHAR

PWSTR

// just exit

Then redirected to standard output…

Some Windows functions use the LARGE_INTEGER structure to represent 64-bit signed integer values, and the ULARGE_INTEGER structure to specify 64-bit unsigned integer values.  Your C compiler may support 64-bit integers natively.  For example, Microsoft® Visual C++® supports the __int64 sized integer type.

 

Pointer to a HANDLE.  This type is declared in windef.h as follows: typedef HANDLE *LPHANDLE;

 

Windows数据类型

{

概念语法:

   BOOL fSuccess;

   // to stop, press end of file characters

_WIN32_IE >= 0x0400

上边的片段是一个恐怕的出口结果。

HANDLE_FLAG_INHERIT – If this flag is set, a child process created with the bInheritHandles parameter ofCreateProcess() set to TRUE will inherit the object handle.

 

 

DuplicateHandle函数可以被原经过调用也能被目的经过调用(或者被一个既是原经过,又是目的经过)。

Input locale identifier.  This type is declared in windef.h as follows:

字符类型

     if(WINVER >= 0x0400)

The following functions are used with handles and objects.

_WIN32_WINDOWS >= 0x0410

Windows Objects and Handles

 

双字类型

在Windows系统中,操作系统提供了3大类型对象:用户对象、GDI对象和水源对象。

诸如,一个怀有GENERIC_READ访问控制权限的文件句柄无法被复制,由此它将具有GENERIC_READ和GENERIC_WRITE访问权限。

                     // normal file archive and impersonate client

   DWORD dwRead, dwWritten;

概念语法:

Pointer to a LONG.  This type is declared in windef.h as follows: typedef long *LPLONG;

地面输入标识符句柄,在头文件windef中定义。

  即便一个应用程序没有标准配备句柄,或者尚未重定向标准配备,例如一个内部桌面运行的一个劳务,那么函数将回到一个NULL值。

函数

 

Unsigned LONG_PTR.  This type is declared in basetsd.h as follows:

Pointer to an INT64.  This type is declared in basetsd.h as follows: typedef INT64 *PINT64;

    printf(“Could not open %s file, error %d\n”, fname, GetLastError());

Retrieves a handle for the standard input, standard output, or standard error device.

Internet Explorer 4.01

(注: 近来多数系统的,字符界面输入都是缓冲型的)

图表设备接口对象句柄,在头文件windef中定义。

Definition

HDESK

HPALETTE

An LPWSTR if UNICODE is defined, an LPSTR otherwise.  This type is declared in winnt.h as follows:

                FILE_SHARE_WRITE,            // share for writing

typedef unsigned long ULONG_PTR;

64位指针,在64位系统中是指针缺委员长度。在32位系统中,是从32位指针扩充的出来的指针。注意:主观假定一个指针的高位状态是一个不安全的作为。

2、STD_OUTPUT_HANDLE

{

typedef unsigned char TBYTE;

SetStdHandle函数相关音讯

The standard handles of a process may be redirected by a call to SetStdHandle(), in which case GetStdHandle() returns the redirected handle.

BOOL GetHandleInformation(HANDLE hObject, LPDWORD lpdwFlags);

DeleteFile(fname);

3、STD_ERROR_HANDLE 

32-bit unsigned integer

 

 

PUINT32

BYTE

 

3、 内校对象来支撑内存管理、进度执行和过程间通信。

The return value

The function

PVOID

HWND

The not so understandable stories about Windows file system and storage can be found Supplementary for Windows file system.

They use data types that allow you to build both 32- and 64-bit versions of your application from a single source code base.

WCHAR

Windows Object Categories

COLORREF

Handle to a GDI object.  This type is declared in windef.h as follows:

相关文章