部分API函数及参数说明

部分API函数及参数说明
部分API函数及参数说明

一、CreateFileForMapping

函数名称: CreateFileForMapping

系统要求: Windows CE 1.01 and later.

头文件: Winbase.h.

链接库: Coredll.lib

函数功能:生成用于映射的文件句柄。

参数:

第1个参数: LPCTSTR lpFileName

文件名指针。

第2个参数: DWORD dwDesiredAccess

文件访问模式。GENERIC_READ、GENERIC_WRITE等。

第3个参数: DWORD dwShareMode

共享模式,不支持。忽略设置为0。

第4个参数: LPSECURITY_ATTRIBUTES lpSecurityAttributes

不支持。为NULL。

第5个参数: DWORD dwCreationDisposition

生成方式。

第6个参数: DWORD dwFlagsAndAttributes

文件标志和属性。

第7个参数: HANDLE hTemplateFile

临时文件句柄。忽略。

返回值:成功:映射文件句柄。

失败:INVALID_HANDLE_VALUE。

说明:

01. 桌面平台没有专门用于映射文件句柄生成的函数,直接用CreateFile就

可以了。

二、 NtGdiSendInput、

NtSetWindowsHookEx

GDI函数:分别用于拦截键盘鼠标模拟输入和全局钩子

三、 ZwCreateFile

原型:

NTSYSAPI

NTSTATUS

NTAPI

ZwCreateFile(

OUT PHANDLE FileHandle,

IN ACCESS_MASK DesiredAccess,

IN POBJECT_ATTRIBUTES ObjectAttributes,

OUT PIO_STATUS_BLOCK IoStatusBlock,

IN PLARGE_INTEGER AllocationSize OPTIONAL,

IN ULONG FileAttributes,

IN ULONG ShareAccess,

IN ULONG CreateDisposition,

IN ULONG CreateOptions,

IN PVOID EaBuffer OPTIONAL,

IN ULONG EaLength

);

参数理解:

OUT-

FileHandle--------这是一个指向一个变量的指针,用来最后存放file object handle的IoStatusBlock-----这个也是个指针变量,指向一个叫做IO_STATUS_BLOCK的结构体,最后函数返回的时候,这个结构体的成员里面要填充一些值,具体的呢就是完成状态,请求操作的一些信息,最重要的一个成员就是Information成员,他显示了函数对文件的处理方式,他的值可能是下面的几个:

FILE_SUPERSEDED(替代)

FILE_OPENED(打开)

FILE_CREATED(创建)

FILE_OVERWRITTEN(重写)

FILE_EXISTS(存在)

FILE_DOES_NOT_EXIST(文件不存在)

再看下这个IO_STATUS_BLOCK的具体结构:

typedef struct _IO_STATUS_BLOCK {

union {

NTSTATUS Status;

PVOID Pointer;

} DUMMYUNIONNAME;

ULONG_PTR Information;

} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

通过上述的两个输出的参数我们可以看到,这个ZwCreateFile函数就是返回创建好的文件对象的句柄,然后返回一个期间处理的方式。

IN-

DesiredAccess----这个参数指定一个访问权限,大概有以下的权限:

FILE_ANY_ACCESS 0x0000 // any type

FILE_READ_ACCESS 0x0001 // file & pipe

FILE_READ_DATA 0x0001 // file & pipe

FILE_LIST_DIRECTORY 0x0001 // directory

FILE_WRITE_ACCESS 0x0002 // file & pipe

FILE_WRITE_DATA 0x0002 // file & pipe

FILE_ADD_FILE 0x0002 // directory

FILE_APPEND_DATA 0x0004 // file

FILE_ADD_SUBDIRECTORY 0x0004 // directory

FILE_CREATE_PIPE_INSTANCE 0x0004 // named pipe

FILE_READ_EA 0x0008 // file & directory

FILE_WRITE_EA 0x0010 // file & directory

FILE_EXECUTE 0x0020 // file

FILE_TRAVERSE 0x0020 // directory

FILE_DELETE_CHILD 0x0040 // directory

FILE_READ_ATTRIBUTES 0x0080 // all types

FILE_WRITE_ATTRIBUTES 0x0100 // all types

FILE_ALL_ACCESS // All of the preceding +

STANDARD_RIGHTS_ALL

最后一个权限最大

这里面要注意的是范围问题,有的值只适合目录,有的只适合管道,有的只适合命名管道,有的同时适用,想下这个地方可以做什么文章

ObjectAttributes---指向下面这个结构的一个变量,就是来表明文件对象的属性的。typedef struct _OBJECT_ATTRIBUTES {

ULONG Length;

HANDLE RootDirectory;

PUNICODE_STRING ObjectName;

ULONG Attributes;

PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */

PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */

} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;

AllocationSize---这是个可选的参数,他是指定初始化文件需要的内存字节数的,所以可向而知,他只有在真正的涉及到文件创建的时候才有意义,也就是说创建,重写,替换这些操作的时候。指向一个LARGE_INTEGER:

typedef union _LARGE_INTEGER {

_ANONYMOUS_STRUCT struct

{

ULONG LowPart;

LONG HighPart;

} DUMMYSTRUCTNAME;

struct

{

ULONG LowPart;

LONG HighPart;

} u;

#endif //MIDL_PASS

LONGLONG QuadPart;

} LARGE_INTEGER, *PLARGE_INTEGER;

FileAttributes---这个参数指定文件的属性,刚才是文件对象的属性。可以是以下的:

FILE_ATTRIBUTE_READONLY

FILE_ATTRIBUTE_HIDDEN

FILE_ATTRIBUTE_SYSTEM

FILE_ATTRIBUTE_DIRECTORY

FILE_ATTRIBUTE_ARCHIVE

FILE_ATTRIBUTE_NORMAL

FILE_ATTRIBUTE_TEMPORARY

FILE_ATTRIBUTE_SPARSE_FILE

FILE_ATTRIBUTE_REPARSE_POINT

FILE_ATTRIBUTE_COMPRESSED

FILE_ATTRIBUTE_OFFLINE

FILE_ATTRIBUTE_NOT_CONTENT_INDEXED

FILE_ATTRIBUTE_ENCRYPTED

ShareAccess---指定共享的权限,以下三种的组合:

FILE_SHARE_READ

FILE_SHARE_WRITE

FILE_SHARE_DELETE

CreateDisposition---这个参数指定要对文件干嘛,呼呼,可以是下面的值:

FILE_SUPERSEDE

FILE_OPEN

FILE_CREATE

FILE_OPEN_IF

FILE_OVERWRITE

FILE_OVERWRITE_IF

CreateOptions---这个参数指定创建或者打开文件的时候做的一些事情,可以是以下的组合:FILE_DIRECTORY_FILE

FILE_WRITE_THROUGH

FILE_SEQUENTIAL_ONLY

FILE_NO_INTERMEDIATE_BUFFERING

FILE_SYNCHRONOUS_IO_ALERT

FILE_SYNCHRONOUS_IO_NONALERT

FILE_NON_DIRECTORY_FILE

FILE_CREATE_TREE_CONNECTION

FILE_COMPLETE_IF_OPLOCKED

FILE_NO_EA_KNOWLEDGE

FILE_OPEN_FOR_RECOVERY

FILE_RANDOM_ACCESS

FILE_DELETE_ON_CLOSE

FILE_OPEN_BY_FILE_ID

FILE_OPEN_FOR_BACKUP_INTENT

FILE_NO_COMPRESSION

FILE_RESERVE_OPFILTER

FILE_OPEN_REPARSE_POINT

FILE_OPEN_NO_RECALL

FILE_OPEN_FOR_FREE_SPACE_QUERY

这个我不太清楚,概念有点模糊

EaBuffer---这个是个可选的参数,用来存放一些扩展的属性

EaLength---存放扩展属性的字节大小

四、ZwOpenFile

ZwOpenFile是一个内核函数,写驱动时使用。打开一个现有的文件,目录,设备,或卷。

函数原型:编辑

NTSTATUS ZwOpenFile(

OUT PHANDLE FileHandle,

IN ACCESS_MASK DesiredAccess,

IN POBJECT_ATTRIBUTES ObjectAttributes,

OUT PIO_STATUS_BLOCK IoStatusBlock,

IN ULONG ShareAccess,

IN ULONG OpenOptions

);

参数介绍:编辑

FileHandle

输出参数。返回打开文件的句柄。

DesiredAccess

输入参数。打开的权限,一般设为GENERIC_ALL。全部权限参考MSDN。ObjectAttributes

输入参数。OBJECT_ATTRIBUTES结构。

IoStatusBlock

输出参数。指向一个结构体的指针。该结构体指明打开文件的状态。ShareAccess

输入参数。共享的权限。可以是FILE_SHARE_READ 或者FILE_SHARE_WRITE。OpenOptions

输入参数。打开选项,一般设为FILE_SYNCHRONOUS_IO_NONALERT。

返回值编辑

NTSTATUS 指明文件是否被成功打开。

五、zwSetSystemInformation

zwSetSystemInformation函数是个未公开的函数,调用38号会加载驱动,对应的第二个参数为SYSTEM_LOAD_AND_CALL_IMAGE结构体,第三个参数为SYSTEM_LOAD_AND_CALL_IMAGE结构体的长度

六、SetWindowsHookEx

外文名SetWindowsHookEx

介绍Windows消息处理机制的一个平台

方式系统调用

钩子链表指针列表

原型编辑

SetWindowsHookEx(WH_KEYBOARD, KeyBoardProc, HInstance, 0);

七、ZwLoadDriver

该函数用于在内核模式或驱动程序中动态加载一个已被正确注册的驱动例程。

函数原型编辑

NTSTATUS

ZwLoadDriver(

IN PUNICODE_STRING DriverServiceName

);

函数说明编辑

参数说明

DriverServiceName:一个指向驱动程序注册表键Unicode字串的指针,该注册表键位于"\Registry\Machine\System\CurrentControlSet\Services\DriverName"(一般位于HKEY_LOCAL_MACHINE主键下),DriverName是该驱动的注册名

七、ZwCreateKey

创建一个注册表键

ZwCreateKey函数既可以打开已存在键又可以创建新键。这两个函数都需要事先用键名以及某些其它信息初始化一个OBJECT_ATTRIBUTES结构。OBJECT_ATTRIBUTES结构的声明如下:

八、ZwCreateKey

删除一个注册表键

九、ZwTerminateProcess

一般的进程管理器使用WIN32 API的OpenProcess和TerminateProcess或NATIVE API 的ZwOpenProcess和ZwTerminateProcess 函数来打开和终止进程

十、ZwWriteProcessMemory

防止远程线程注入

十一、NtSystemDebugControl

NtSystemDebugControl是Windows NT系列操作系统上实现的一个系统调用,在不同系统上的调用号分别为:

Windows NT 0xba

Windows 2000 0xde

Windows XP 0xff

Windows 2003 0x108

NtSystemDebugControl (

IN SYSDBG_COMMAND Command,

IN PVOID InputBuffer,

IN ULONG InputBufferLength,

OUT PVOID OutputBuffer,

IN ULONG OutputBufferLength,

OUT PULONG ReturnLength

);

C语言socket()函数

C语言socket()函数:建立一个socket通信 相关函数:accept, bind, connect, listen 头文件:#include #include 定义函数:int socket(int domain, int type, int protocol); 函数说明:socket()用来建立一个新的socket, 也就是向系统注册, 通知系统建立一通信端口. 参数domain 指定使用何种的地址类型, 完整的定义在/usr/include/bits/socket.h 内, 底下是常见的协议: PF_UNIX/PF_LOCAL/AF_UNIX/AF_LOCAL UNIX 进程通信协议 PF_INET?AF_INET Ipv4 网络协议 PF_INET6/AF_INET6 Ipv6 网络协议 PF_IPX/AF_IPX IPX-Novell 协议 PF_NETLINK/AF_NETLINK 核心用户接口装置 PF_X25/AF_X25 ITU-T X. 25/ISO-8208 协议 PF_AX25/AF_AX25 业余无线AX. 25 协议 PF_ATMPVC/AF_ATMPVC 存取原始ATM PVCs PF_APPLETALK/AF_APPLETALK appletalk (DDP)协议 PF_PACKET/AF_PACKET 初级封包接口

参数type 有下列几种数值: 1、SOCK_STREAM 提供双向连续且可信赖的数据流, 即TCP. 支持OOB 机制, 在所有数据传送前必须使用connect()来建立连线状态. 2、SOCK_DGRAM 使用不连续不可信赖的数据包连接 3、SOCK_SEQPACKET 提供连续可信赖的数据包连接 4、SOCK_RAW 提供原始网络协议存取 5、SOCK_RDM 提供可信赖的数据包连接 6、SOCK_PACKET 提供和网络驱动程序直接通信. protocol 用来指定socket 所使用的传输协议编号, 通常此参考不用管它, 设为0 即可. 返回值:成功则返回socket 处理代码, 失败返回-1. 错误代码: 1、EPROTONOSUPPORT 参数domain 指定的类型不支持参数type 或protocol 指定的协议 2、ENFILE 核心内存不足, 无法建立新的socket 结构 3、EMFILE 进程文件表溢出, 无法再建立新的socket 4、EACCESS 权限不足, 无法建立type 或protocol 指定的协议 5、ENOBUFS/ENOMEM 内存不足 6、EINVAL 参数domain/type/protocol 不合法 范例:参考connect().

Delphi Api

auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API 删除打印机缓冲文件AbortSystemShutdown API 停止系统工作 AccessCheck API 检验客户访问权限AccessCheckAndAuditAlarm API 检验访问,产生声音或警报ActivateKeyboardLayout API 激活一个新的键盘设备AddAccessAllowedAce API 将ACCESS_ALLOWED_ACE加入ACL AddAccessDeniedAce API 将ACCESS_DENIED_ACE加入ACL AddAce API 将ACE加入一个已存在的ACL AddAtom API 将一个字符串加入本地原子表AddAuditAccessAce API 将SYSTEM_AUDIT_ACE加入ACL AddFontResource API 将一种字体加入字体表 AddForm API 加入一个打印机窗体 AddJob API 启动一个打印作业 AddMonitor API 加入一个打印机管理器 AddPort API 加入一个打印机端口 AddPrintProcessor API 将打印处理器复制到打印机服务器中AddPrintProvidor API 加入一个打印机支持器 AddPrinter API 在打印机服务器上建立一个打印机AddPrinterConnection API 为当前用户建立与打印机的联系AddPrinterDriver API 将打印机驱动程序复制到打印机服务器中AdjustTokenGroups API 使能/取消令牌中的群AdjustTokenPrivileges API 使能/取消令牌特权AdjustWindowRect API 计算所需窗口矩形的大小AdjustWindowRectEx API 计算所需窗口矩形的大小AdvancedDocumentProperties API 进行打印机高级设置AllocConsole API 为当前进程建立控制台AllocateAndInitializeSid API 分配和初始化SID AllocateLocallyUniqueId API 分配LUID AngleArc API 按指定角度画弧 AnimatePalette API 替换逻辑调色板中的项目 AnyPopup API 标识弹出式窗口是否存在 AppendMenu API 在菜单中加入新的项目 Arc API 画弧 ArcTo API 画椭圆弧 AreAllAccessesGranted API 检查所有要求的访问AreAnyAccessesGranted API 检查任何要求的访问ArrangeIconicWindows API 排列最小化的子窗口

什么是Socket

什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket 接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 Socket建立 为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为: int socket(int domain, int type, int protocol); domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型: SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket (SOCK_RAW),允许程序使用低层协议;protocol通常赋值"0"。 Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。 两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。 Socket配置 通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用 bind函数来配置本地信息。 Bind函数将socket与本机上的一个端口相关联,随后你就可以在该端口监听服务请求。Bind 函数原型为: int bind(int sockfd,struct sockaddr *my_addr, int addrlen); Sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为sizeof(struct sockaddr)。 struct sockaddr结构类型是用来保存socket信息的: struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char sa_data[14]; /* 14 字节的协议地址 */ }; sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;sa_data则包含该socket 的IP地址和端口号。 另外还有一种结构类型: struct sockaddr_in {

PHPsocket函数讲解

PHPsocket函数讲解 PHPsocket函数讲解 代码如下: extension=php_sockets.dll 如果你无法去掉注释,那么请使用下面的代码来加载扩展库: 代码如下: if(!extension_loaded('sockets')){ if(strtoupper(substr(PHP_OS,3))=="WIN"){ dl('php_sockets.dll'); }else{ dl('sockets.so'); } } 如果你不知道你的socket是否打开,那么你可以使用phpinfo()函数来确定socket是否打开。你通过查看phpinfo信息了解 socket是否打开。 phpsocket相关函数如下: 代码如下: socket_accept()接受一个Socket连接 socket_bind()把socket绑定在一个IP地址和端口上 socket_clear_error()清除socket的错误或者最后的错误代码socket_close()关闭一个socket资源

socket_connect()开始一个socket连接 socket_create_listen()在指定端口打开一个socket监听 socket_create_pair()产生一对没有区别的socket到一个数组里 socket_create()产生一个socket,相当于产生一个socket的数据结构 socket_get_option()获取socket选项 socket_getpeername()获取远程类似主机的'ip地址 socket_getsockname()获取本地socket的ip地址 socket_iovec_add()添加一个新的向量到一个分散/聚合的数组 socket_iovec_alloc()这个函数创建一个能够发送接收读写的iovec数据结构 socket_iovec_()删除一个已经分配的iovec socket_iovec_fetch()返回指定的iovec资源的数据 socket_iovec_free()释放一个iovec资源 socket_iovec_set()设置iovec的数据新值 socket_last_error()获取当前socket的最后错误代码 socket_listen()监听由指定socket的所有连接 socket_read()读取指定长度的数据 socket_readv()读取从分散/聚合数组过来的数据 socket_recv()从socket里结束数据到缓存 socket_recvfrom()接受数据从指定的socket,如果没有指定则默认当前socket socket_recvmsg()从iovec里接受消息

DELPHI常用组件

Delphi常用组件的使用 目录 1.按钮类组件 1.1Button组件

Button组件位于Standard页。 Button组件的常用属性表 属性描述 Cation用于在按钮上显示文本内容 Cancel用来指定按钮是否为取消按钮 Default用于指定按钮是否为默认按钮,在按Enter键时也选中命令按钮Hint设置鼠标在组件上短暂停时在组件旁显示的提示小窗口的内容ShowHint确定是否显示提示文本,默认值是FALSE 1.2Bitbtn组件 Bitbtn组件(位图组件)位于Additional,与Button很相似,只是多了一个位图符号在按钮上(如带有对号的OK,问好的Help等),其某些属性与Button类似,下表为其独有的的特性。(注:此组件不需编写代码) Bitbtn组件的常用属性表 属性描述 Kind Kind属性的值就是位图按钮上显示的图标。Kind属性后的下拉列表中有一组默认图标的属性值,有bkCancel(取消)、bkAbort(终止)、bkAll(所有)、 bkClose(关闭)等。 Glyph用于在位图按钮上显示加载后的位图图形 NumGlyphs用于指明位图按钮所能使用位图的个数。在delphi中,最多允许向一个位图按钮提供4个图像文件,用于表示4中不停状态 Layout用于指出位图图形在位图组件上的放置位置 1.3SpeedButton组件 SpeedButton组件(加速按钮)位于Additional,常放置在Panel组件上,用于设计工具栏。它与Bitbtn相似,也可以显示图像和文本,但通常只用于显示图像。 SpeedButton组件的常用属性表 属性描述 AllowAllUp用于设置同一组的加速按钮是否具有同时弹起的状态。若设置为FALSE,则当同一组加速按钮中的一个被按下时,其他加速按钮都处于弹起状态,即这 组按钮必须有且只有一个处于按下状态 Down用于设置该加速按钮是否处于按下状态,若设置为TRUE,则表示按钮处于按下状态 Flat用于设置在鼠标移动到该按钮上时,按钮是否显示三维效果。为FLASE则不出现 GroupIndex用于将数个加速按钮设置成一组,只需将其值设置成不等于0的数值即可1.4RadioButton组件

socket原理详解

socket原理详解 1、什么是socket 我们知道进程通信的方法有管道、命名管道、信号、消息队列、共享内存、信号量,这些方法都要求通信的两个进程位于同一个主机。但是如果通信双方不在同一个主机又该如何进行通信呢?在计算机网络中我们就学过了tcp/ip协议族,其实使用tcp/ip协议族就能达到我们想要的效果,如下图(图片来源于《tcp/ip协议详解卷一》第一章1.3) 、 图一各协议所处层次 当然,这样做固然是可以的,但是,当我们使用不同的协议进行通信时就得使用不同的接口,还得处理不同协议的各种细节,这就增加了开发的难度,软件也不易于扩展。于是UNIX BSD就发明了socket这种东西,socket屏蔽了各个协议的通信细节,使得程序员无需关注协议本身,直接使用socket提供的接口来进行互联的不同主机间的进程的通信。这就好比操作系统给我们提供了使用底层硬件功能的系统调用,通过系统调用我们可以方便的使用磁盘(文件操作),使用内存,而无需自己去进行磁盘读写,内存管理。socket其实也是一样的东西,就是提供了tcp/ip

协议的抽象,对外提供了一套接口,同过这个接口就可以统一、方便的使用tcp/ip协议的功能了。百说不如一图,看下面这个图就能明白了。 图二 socket所处层次 那么,在BSD UNIX又是如何实现这层抽象的呢?我们知道unix中万物皆文件,没错,bsd在实现上把socket设计成一种文件,然后通过虚拟文件系统的操作接口就可以访问socket,而访问socket时会调用相应的驱动程序,从而也就是使用底层协议进行通信。(vsf也就是unix提供给我们的面向对象编程,如果底层设备是磁盘,就对磁盘读写,如果底层设备是socket就使用底层协议在网中进行通信,而对外的接口都是一致的)。下面再看一下socket的结构是怎样的(图片来源于《tcp/ip协议详解卷二》章节一,1.8描述符),注意:这里的socket是一个实例化之后的socket,也就是说是一个具体的通信过程中的socket,不是指抽象的socket结构,下文还会进行解释。

socket函数解读

socket函数说明 1、accept(接受socket连线) 相关函数 socket,bind,listen,connect 定义函数 int accept(int s,struct sockaddr * addr,int * addrlen); 函数说明 accept()用来接受参数s的socket连线。参数s的socket必需先经bind()、listen()函数处理过,当有连线进来时accept()会返回一个新的socket处理代码,往后的数据传送与读取就是经由新的socket处理,而原来参数s的socket能继续使用accept()来接受新的连线要求。连线成功时,参数addr所指的结构会被系统填入远程主机的地址数据,参数addrlen为scokaddr的结构长度。关于结构sockaddr的定义请参考bind()。 返回值成功则返回新的socket处理代码,失败返回-1,错误原因存于errno中。 错误代码 EBADF 参数s 非合法socket处理代码。 EFAULT 参数addr指针指向无法存取的内存空间。 ENOTSOCK 参数s为一文件描述词,非socket。 EOPNOTSUPP 指定的socket并非SOCK_STREAM。 EPERM 防火墙拒绝此连线。 ENOBUFS 系统的缓冲内存不足。 ENOMEM 核心内存不足。 范例参考listen()。 2、bind(对socket定位) 相关函数 socket,accept,connect,listen 定义函数 int bind(int sockfd,struct sockaddr * my_addr,int addrlen); 函数说明 bind()用来设置给参数sockfd的socket一个名称。此名称由参数my_addr指向一sockaddr结构,对于不同的socket domain定义了一个通用的数据结构 struct sockaddr { unsigned short int sa_family; char sa_data[14]; }; sa_family 为调用socket()时的domain参数,即AF_xxxx值。 sa_data 最多使用14个字符长度。 此sockaddr结构会因使用不同的socket domain而有不同结构定义,例如使用AF_INET domain,其socketaddr 结构定义便为 struct socketaddr_in { unsigned short int sin_family; uint16_t sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; }; struct in_addr { uint32_t s_addr;

函数的基础知识

第一部分 函数的概念 一、映射的概念 1、相关概念:映射;一一映射、函数 2、构成映射的基本条件: 构成一一映射的基本条件: 3、映射的要素: 4、构成映射的个数:A 中有m 个元素,B 中有n 个元素,则B A f →:的映射个数是m n 个; A 中有n 个元素, B 中有n 个元素,则B A f →:的一一映射个数是!n 个 二、函数的概念 1.函数的定义(1)两要素(2)如何判断给定两个变量之间的关系是否为函数关系(3)判断两 个函数是否为同一个函数 2.函数的表示方法:函数是非空数集与非空数集之间的映射. 3.函数的表示:函数图象既可以是连续的曲线,也可以是直线、折线、离散的点等等,注意判 断一个图形是否是函数图象的依据; (1)解析法:必须注明函数的定义域; (2)图象法:描点法作图要注意:确定函数的定义域;化简函数的解析式;观察函数的特征; (3)列表法:选取的自变量要有代表性,应能反映定义域的特征. 三、函数的定义域: 1、函数解析式:使得函数成立的自变量的取值范围. (1)整式函数的定义域是全体实数; (2)分式函数的分母不为零; (3)偶次根式或者是幂指数的指数为分母是偶数时,底数不小于零; (4)奇次根式或者是幂指数的指数为分母是奇数时,定义域是全体实数; (5)对数中底数大于零且不等于1,指数大于零; (6)零指数或负指数(指数没分母或者分母不是偶数)幂函数时底数不为零; (7)对数函数定义域底数大于0,且不等于1,真数大于0 (8)分段函数各部分的定义域取并集; (9)几个简单函数通过加减乘除运算的各部分定义域取交集; 2、图表:表中的x 值的集合 3、图像:每个点对应的横坐标的集合 4、实际问题:实际问题实际分析.

(DELPHI)API函数大全

(DELPHI)API函数大全 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称WNetGetLastError 获取网络错误的扩展错误信息WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC (统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime 取得消息队列中上一条消息处理完毕时的时间PostMessage 将一条消息投递到指定窗口的消息队列PostThreadMessage 将一条消息投递给应用程序RegisterWindowMessage 获取分配给一个字串标识符的消息编号ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件

SOCKET函数详解(My整理)

Socket 函数说明 1.1 库函数综述 1.1.1 套接字函数 表 1.1 Windows Sockets 1.1 版本Berkeley Sockets函数 函数名说明 accept()确认外来连接,并将它与一个立即建立的数据套接字联系起来。原始套 接字返回到监听状态 bind() 给未命名套接字赋一个本地名 closesocket()从进程对象参考表中删去一个套接字,只有当SO_LINGER设置时才阻塞connect()在指定套接字上初始化连接 getpeername() 获取与指定套接字连接的对等方的名字 getsockname() 获取指定套接字的当前名字 getsockopt() 获取与指定套接字相关的选项 htonl() 将一个32位数从主机字节顺序转换为网络字节顺序 htons() 将一个16 位数从主机字节顺序转换为网络字节顺序 inet_addr() 将一个用网际标准点分表示法表示的字符串地址转换成网际地址值 inet_ntoa() 将一个网际地址值转换成一个用点分十进制表示法表示的字符串地址ioctlsocket() 为套接字提供控制 listen() 在指定套接字上监听外来连接 ntohl() 将一个32位数从网络字节顺序转换为主机字节顺序 ntohs() 将一个16 位数从网络字节顺序转换为主机字节顺序 recv()从一个连接的套接字上接收数据 recvfrom()从一个连接或未连接的套接字上接收数据 select()执行多路同步I/O send()给一个连接套接字发送数据 sendto()给一个连接或未连接套接字发送数据 setsockopt() 设置与指定套接字相关的选项 shutdown() 关闭全双工连接的一部分 socket() 建立一个通讯用的末端点,返回一个套接字 注:标红函数作用在阻塞套接字上可以阻塞。 这些函数根据功能的不同可以分为如下几类: (1) 套接字函数。此类函数包括socket(),bind(),getpeername(),getsockname()和closesocket(),它们主要完成创建,关闭套接字功能,以及对套接字命名与名字获取。 (2) 网络连接函数。此类函数包括listen() ,accept(),connect()和shutdown(),它们完成网络连接(如虚电路)的建立与关闭。此类函数中有部分可阻塞。 (3) 数据传输函数。此类函数包括send(),recv() ,sendto()和recvfrom() ,它们完成网络数据的发送与接收,全部是可以阻塞的函数。 (4) 字节定序函数。此类函数包括htonl(),htons(),ntohl()和ntohs(),它们完成主机/网络之间数据字节顺序的转换。 (5) 地址转换函数。此类函数包括inet_addr(),inet_ntoa(),它们完成网络字符串地址和Internet 地址之间的转换。 (6) 套接字控制函数。此类函数包括getsockopt(),setsockopt(),ioctlsocket()和select(),它们设置/获取套接字的选项,控制/检测套接字的工作状态。其中select()函数在必要时可能阻塞。 只使用了上述函数Berkeley Sockets 源程序基本上可以不加修改地移植到Windows Sockets 环境中来。但是,移植过来的程序有一个最大的问题是“阻塞”。在Berkeley Sockets 中,套接字默认的工作模式是操作处于阻塞方式,一个阻塞操作可能阻塞整个Windows 环境。在非抢先Windows环境,强烈推荐程序员使用非阻塞(异步)操作,也就是说,推荐使用Windows Sockets 提供的异步选择函数代替可能阻塞的select()函数,并且用网络事件消息来驱动可能阻塞的网络连接函数(accept()和connect())和数据传输函数,这样设计的程序能更好地工作。 1.1.2 数据库函数 Windows Sockets定义了如表1.2 所示的“数据库”函数:

linux socket编程基础(必读)

socket编程 Linux下Socket编程基础(实例) 1、引言 Linux的兴起可以说是Internet创造的一个奇迹。Linux作为一个完全开放其原代码的免费的自由软件,兼容了各种UNIX标准(如POSIX、UNIX System V和BSD UNIX等)的多用户、多任务的具有复杂内核的操作系统。在中国,随着Internet的普及,一批主要以高等院校的学生和ISP的技术人员组成的Linux爱好者队伍已经蓬勃成长起来。越来越多的编程爱好者也逐渐酷爱上这个优秀的自由软件。本文介绍了Linux下Socket的基本概念和函数调用。 2、什么是Socket Socket(套接字)是通过标准的UNIX文件描述符和其它程序通讯的一个方法。每一个套接字都用一个半相关描述:{协议,本地地址、本地端口}来表示;一个完整的套接字则用一个相关描述:{协议,本地地址、本地端口、远程地址、远程端口},每一个套接字都有一个本地的由操作系统分配的唯一的套接字号。 3、Socket的三种类型 (1)流式Socket(SOCK_STREAM) 流式套接字提供可靠的、面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序的。 (2)数据报Socket(SOCK_DGRAM)

数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠、无差错。它使用数据报协议UDP (3)原始Socket 原始套接字允许对底层协议如IP或ICMP直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。 4、利用套接字发送数据 1、对于流式套接字用系统调用send()来发送数据。 2、对于数据报套接字,则需要自己先加一个信息头,然后调用sendto()函数把数据发送出去。 5、Linux中Socket的数据结构 (1)struct sockaddr{//用于存储套接字地址 unsigned short sa_family;//地址类型 char sa_data[14];//14字节的协议地址 }; (2)struct sockaddr_in{//in代表internet short int sin_family;//internet协议族 unsigned short int sin_port;//端口号,必须是网络字节顺序 struct in_addr sin_addr;//internet地址,必须是网络字节顺序 unsigned char sin_zero;//添0(和struct sockaddr一样大小 };

初高中函数知识点总结大全

初高中函数知识点总结大全 正比例函数 形如y=kx (k为常数,k≠0)形式,y是x的正比例函数。 1.定义域:R(实数集) 2.值域:R(实数集) 3.奇偶性:奇函数 4.单调性: 当k>0时,图像位于第一、三象限,y随x的增大而增大(单调递增);当k<0时,图像位于第二、四象限,y随x的增大而减小(单调递减)。 一次函数 一、定义及定义式: 自变量x和因变量y有如下关系:y=kx+b则此时称y是x的一次函数。 特别地,当b=0时,y是x的正比例函数。即:y=kx (k为常数,k ≠0) 一次函数及正比例函数的识别 方法:若y=kx+b(k,b是常数,k≠0),那么y叫做x的一次函数,特别的,当b=0时,一次函数就成为y=kx(k是常数,k≠0),这 时,y叫做x的正比例函数,当k=0时,一次函数就成为若y=b,这时,y叫做常函数。 ☆A及B成正比例A=kB(k≠0) 二、一次函数的性质:

1.y的变化值及对应的x的变化值成正比例,比值为k,即:y=kx+b (k 为任意不为零的实数 b取任何实数) 2.当x=0时,b为函数在y轴上的截距。 三、一次函数的图像及性质: 1.作法及图形:通过如下3个步骤 (1)列表; (2)描点; (3)连线,可以做出一次函数的图像——一条直线。因此,作一次函数的图像只需知道2点,并连成直线即可。(通常找函数图像及x 轴和y轴的交点) 2.性质: (1)在一次函数上的任意一点P(x,y),都满足等式:y=kx+b。(2)一次函数及y轴交点的坐标总是(0,b),及x轴总是交于(-b/k,0)正比例函数的图像总是过原点。 3.k,b及函数图像所在象限: 当k>0时,直线必通过一、三象限,y随x的增大而增大; 当k<0时,直线必通过二、四象限,y随x的增大而减小。 当b>0时,直线必通过一、二象限; 当b=0时,直线通过原点 当b<0时,直线必通过三、四象限。 特别地,当b=0时,直线通过原点O(0,0)表示的是正比例函数的图像。

delphi常用函数大全

delphi常用函数大全(转) Abort函数引起放弃的意外处理 Abs函数绝对值函数 AddExitProc函数将一过程添加到运行时库的结束过程表中 Addr函数返回指定对象的地址 AdjustLineBreaks函数将给定字符串的行分隔符调整为CR/LF序列Align属性使控件位于窗口某部分 Alignment属性控件标签的文字位置 AllocMem函数在堆栈上分配给定大小的块 AllowGrayed属性允许一个灰度选择 AnsiCompareStr函数比较字符串(区分大小写) AnsiCompareText函数比较字符串(不区分大小写) AnsiLowerCase函数将字符转换为小写 AnsiUpperCase函数将字符转换为大写 Append函数以附加的方式打开已有的文件 ArcTan函数余切函数 AssignFile函数给文件变量赋一外部文件名 Assigned函数测试函数或过程变量是否为空 AutoSize属性自动控制标签的大小 BackgroundColor属性背景色 BeginThread函数以适当的方式建立用于内存管理的线程 BevelInner属性控件方框的内框方式 BevelOuter属性控件方框的外框方式 BevelWidth属性控件方框的外框宽度 BlockRead函数读一个或多个记录到变量中 BlockWrite函数从变量中写一个或多个记录 BorderStyle属性边界类型 BorderWidth属性边界宽度 Break命令终止for、while、repeat循环语句 Brush属性画刷 Caption属性标签文字的内容 ChangeFileExt函数改变文件的后缀 ChDir函数改变当前目录 Checked属性确定复选框选中状态 Chr函数返回指定序数的字符 CloseFile命令关闭打开的文件 Color属性标签的颜色 Columns属性显示的列数 CompareStr函数比较字符串(区分大小写) Concat函数合并字符串 Continue命令继续for、while、repeat的下一个循环 Copy函数返回一字符串的子串 Cos函数余弦函数 Ctl3D属性是否具有3D效果 Cursor属性鼠标指针移入后的形状 Date函数返回当前的日期 DateTimeToFileDate函数将DELPHI的日期格式转换为DOS的日期格式DateTimeToStr函数将日期时间格式转换为字符串DateTimeToString函数将日期时间格式转换为字符串 DateToStr函数将日期格式转换为字符串

Delphi 文件操作集锦

Delphi 文件操作集锦 Delphi 文件操作集锦 时间:2011-5-26来源:yang 作者: peng点击: 11次Delphi 文件操作集锦 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses activex,comobj,shlobj; {$R *.dfm} function ResolveLink(const ALinkfile: String): String; var

link: IShellLink; storage: IPersistFile; filedata: TWin32FindData; buf: Array[0..MAX_PATH] of Char; widepath: WideString; begin OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, link)); OleCheck(link.QueryInterface(IPersistFile, storage)); widepath := ALinkFile; Result := ‘unable to resolve link‘; If Succeeded(storage.Load(@widepath[1], STGM_READ)) Then If Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) Then If Succeeded(link.GetPath(buf, sizeof(buf), filedata, SLGP_UNCPRIORITY)) Then Result := buf; storage := nil; link:= nil; end; // 用法: procedure TForm1.Button1Click(Sender: TObject);

三角函数基础知识点(整理)

三角函数基础知识点 1、两角和公式 sin(A ±B) = sinAcosB ±cosAsinB B A B A B A tan tan 1tan tan )tan(?±=±μ cos(A ±B) = cosAcosB μsinAsinB 2、二倍角公式(含万能公式) tan2A = A tan 12tanA 2- sin2A=2sinA ?cosA=A tan 12tanA 2 + cos2A = cos 2 A-sin 2 A=2cos 2 A-1=1-2sin 2 A=A tan 1A tan -12 2+ 22cos 1tan 1tan sin 222 A A A A -=+= 2 2cos 1cos 2 A A += 3、特殊角的三角函数值

4、诱导公式 公式一: απαsin )2sin(=+k ;απαcos )2cos(=+k ;απαtan )2tan(=+k .(其中Z ∈k ). 公式二: ααπ-sin sin(=+);ααπ-cos cos(=+);ααπtan tan(=+). 公式三: sin()-sin αα-=;cos()cos αα-= ;tan()tan αα-=-. 公式四: ααπsin sin(=-);ααπ-cos cos(=-);ααπtan tan(-=-) 公式五: sin(2sin παα-=-);cos(2cos παα-=);tan(2tan παα-=-) 公式六: sin(2π-α) = cos α; cos(2π -α) = sin α. 公式七: sin(2π+α) = cos α;cos(2π +α) =- sin α. 公式八: sin(32π-α)=- cos α; cos(32π -α) = -sin α. 公式九: sin(32π+α) = -cos α;cos(32 π +α) = sin α. 以上九组公式可以推广归结为:要求角2 k π α?±的三角函数值, 只需要直接求角α的三角函数值的问题.这个转化的过程及结果就是十字口诀“奇变偶不变,符号看象限”。即诱导公式的左边为k ·900+α(k ∈Z )的正弦(切)或余弦(切)函数,当k 为奇数时,右边的函数名称正余互变;当k 为偶数时,右边的函数名称不改变,这就是“奇变偶不变”的含义,再就是将α“看成”锐角(可能并不是锐角,也可能是大于锐角也可能小于锐角还有可能是任意角),然后分析k ·900+α(k ∈Z )为第几象限角,再判断公式左边这个三角函数在此象限是正还是负,也就是公式右边的符号。

常用API函数参数

常用API函数参数5 ImmIsIME 函数功能: 判断指定的句柄是否为IME; 函数原型: BOOL ImmIsIME( HKL hKL ); 参数hKL: 待检查的键盘布局句柄; 返回值: 函数调用成功返回1,失败返回0. 速查信息: Windows NT: 要求4.0或更高版本 Windows: 要求Windows 95 或更高. Windows CE:不支持. Header: 声明在imm.h. Import Library: imm32.lib. Windows XP没有自带五笔型输入法,这对五笔型用户而言无疑是个大大的遗憾。网上的五笔型输入法虽然种类很多,也不乏优秀的版本,但一方面有些版本是共享软件需要注册,另一方面也许很多五笔型输入法的老用户最习惯用的还是老牌的“王码五笔型输入法86/98版”。 微软的Office XP软件中包含了这个老牌的五笔型输入法,但如果用户并不使用Office XP中的任何组件,仅仅是为了使用“王码五笔型输入法”而运行Office XP安装程序,就显的有些小题大做了,更不用说是某些零时在外面用公用电脑而又想用五笔型输入法的情况。于是网上出现了很多简化的安装方法,大体上可以分为三个步骤: 拷贝输入法文件(从Of还是9x/ME。示例代码fice XP光盘中或已经安装了“王码五笔型输入法”的电脑中提取) 增加注册表项 重启后通过控制面板添加输入法

整个过程中拷贝输入法文件和增加注册表项可以用批处理和导入注册表文件来简化操作,但必须重启计算机才能在控制面板里添加输入法,这同样让使用者觉得比较烦琐。那么作为一个编程爱好者能不能通过写个小程序来实现在不重新启动计算机的情况下全自动的安装“王码五笔型输入法”呢(也就是即装即用)?答案是肯定的!因为微软的Office XP 安装程序做到了,这就表示微软肯定留有一个专门用来安装输入法的接口,一般来说应该是一系列API函数。 经过一番摸索,笔者在MSDN里找到了这个可以用来安装输入法的API:ImmInstallIME()。Ok,现在我们就开始利用这个API来实现自己的“王码五笔型输入法”全自动安装程序。 一、准备素材 我们先试着从Office XP光盘中提取“王码五笔型输入法”的输入法文件。通过Windows 的查找功能在Office XP的第一张安装盘中查找与“WINWB”相关的文件,在OFFICE1.CAB 中找到了一下14个文件:WINWB86.CHM.*、https://www.360docs.net/doc/e46494235.html,T.*、WINWB86.HLP.*、WINWB86A.IME.*、WINWB86A.MB.*、WINWB86W.IME.*、WINWB86W.MB.*、WINWB98.CHM.*、https://www.360docs.net/doc/e46494235.html,T.*、WINWB98.HLP.*、WINWB98A.IME.*、WINWB98A.MB.*、WINWB98W.IME.*、WINWB98W.MB.*,其中*是很长的一串由字母、数字和下滑线组成的序列(个人认为应该是微软为了校验文件内容的正确性而加上的内容为该文件效验码的后缀吧)。去掉这个长长的后缀,可以看到5 种类型的文件。很明显,*.CHM、*.CNT和*.HLP是五笔型输入法的帮助文件,*.MB是码表文件,而*.IME是主要的输入法文件。其中*.IME和*.MB有文件名部分以A结尾和以W结尾两个版本,经过笔者试验证实了它们分别是ANSI和UNICODE两种版本的输入法文件。文件名部分以A结尾的文件适用于Windows 9x,以W结尾的文件适用于NT系列Windows系统。 提取了输入法文件后必须让安装程序针对不同版本的操作系统将它们拷贝到正确的目录,以便调用API来进行输入法安装。笔者分别在安装了Office XP中自带的“王码五笔型输入法”的Windows 98SE和Windows XP操作系统中查找以上文件,发现帮助文件都存放在WINDOWSHELP目录中(这里假设Windows系统都安装在WINDOWS目录)。而主要的输入法文件(*.IME)和码表文件(*.MB)在Windows 9x下存放于WINDOWSSYSTEM目录中,在NT系列Windows系统中存放于WINDOWSSYSTEM32目录中。 二、相关API函数 素材的准备工作已经完成,现在我们来看一下代码编写过程中需要用到的4个主要的API函数。 2.1 GetVersion 函数原型:

相关文档
最新文档