API函数:进程线程类(第26课)

user32!AttachThreadInput

功能:把一个线程的输入消息连接到另外的线程

 

函数原型:

BOOL WINAPI AttachThreadInput(   __in  DWORD idAttach,   __in  DWORD idAttachTo,   __in  BOOL fAttach );

 

参数介绍:

idAttach:指定要连接到另外一个线程的线程。该线程不能是系统线程。

idAttachTo:要连接其他线程的线程,该线程不能是系统线程。且线程不能自己连接到自己。

fAttach:为TRUE:连接; 为FALSE: 释放连接

 

返回值:

如果调用成功则返回非零值。

 

备注:

在一些情况下,自己的窗口没有输入焦点但是想要当前焦点窗口的键盘输入消息,可以使用Win32 API函数AttachThreadInput()来解决这个问题

 

kernel32!CheckRemoteDebuggerPresent

功能:检查一个特定进程是否被调试。这个函数通常在一个反调试技术中被使用。

 

函数原型:

BOOL WINAPI CheckRemoteDebuggerPresent(

_In_    HANDLE hProcess,

_Inout_ PBOOL  pbDebuggerPresent

);

 

参数介绍:

hProcess:进程句柄.

pbDebuggerPresent:如果hProcess所代表的进程被调试,此变量返回TRUE,否则返回FALSE。

 

返回值:

成功返回非0,失败返回0.

 

备注:

 

kernel32!ConnectNamedPipe

功能:指示一台服务器等待下去,直至客户机同一个命名管道连接。

 

函数原型:

BOOL WINAPI ConnectNamedPipe(

_In_        HANDLE       hNamedPipe,

_Inout_opt_ LPOVERLAPPED lpOverlapped

);

 

参数介绍:

hNamedPipe:管道的句柄。

lpOverlapped,如设为NULL(传递ByVal As int),表示将线程挂起,直到一个客户同管道连接为止。否则就立即返回;此时,如管道尚未连接,客户同管道连接时就会触发lpOverlapped结构中的事件对象。随后,可用一个等待函数来监视连接

 

返回值:

Long,如lpOverlapped为NULL,那么:

如管道已连接,就返回Ture(非零);如发生错误,或者管道已经连接,就返回零(GetLastError此时会返回ERROR_PIPE_CONNECTED)

lpOverlapped有效,就返回零;如管道已经连接,GetLastError会返回ERROR_PIPE_CONNECTED;如重叠操作成功完成,就返回ERROR_IO_PENDING。在这两种情况下,倘若一个客户已关闭了管道,且服务器尚未用DisconnectNamedPipe函数同客户断开连接,那么GetLastError都会返回ERROR_NO_DATA

 

备注:

用来为进程间通信创建一个服务端管道,等待一个客户端管道连接进来。后门程序和反向shell经常使用此函数来简单的连接到一个命令控制服务器。

 

kernel32!CreateProcess

功能:创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。

 

函数原型:

BOOL CreateProcess

(

LPCTSTR lpApplicationName,

LPTSTR lpCommandLine,

LPSECURITY_ATTRIBUTES lpProcessAttributes,

LPSECURITY_ATTRIBUTES lpThreadAttributes,

BOOL bInheritHandles,

DWORD dwCreationFlags,

LPVOID lpEnvironment,

LPCTSTR lpCurrentDirectory,

LPSTARTUPINFO lpStartupInfo,

LPPROCESS_INFORMATION lpProcessInformation

);

 

参数说明:

lpApplicationName

指向一个NULL结尾的、用来指定可执行模块的字符串。

这个字符串可以是可执行模块的绝对路径,也可以是相对路径,在后一种情况下,函数使用当前驱动器和目录建立可执行模块的路径。

这个参数可以被设为NULL,在这种情况下,可执行模块的名字必须处于 lpCommandLine 参数最前面并由空格符与后面的字符分开。

lpCommandLine

指向一个以NULL结尾的字符串,该字符串指定要执行的命令行。

这个参数可以为空,那么函数将使用lpApplicationName参数指定的字符串当做要运行的程序的命令行。

如果lpApplicationName和lpCommandLine参数都不为空,那么lpApplicationName参数指定将要被运行的模块,lpCommandLine参数指定将被运行的模块的命令行。新运行的进程可以使用GetCommandLine函数获得整个命令行。C语言程序可以使用argc和argv参数。

lpProcessAttributes

指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。

lpThreadAttributes

同lpProcessAttribute,不过这个参数决定的是线程是否被继承.通常置为NULL.

bInheritHandles

指示新进程是否从调用进程处继承了句柄。

如果参数的值为真,调用进程中的每一个可继承的打开句柄都将被子进程继承。被继承的句柄与原进程拥有完全相同的值和访问权限。

dwCreationFlags

指定附加的、用来控制优先类和进程的创建的标志。还用来控制新进程的优先类,优先类用来决定此进程的线程调度的优先级。

lpEnvironment

指向一个新进程的环境块。如果此参数为空,新进程使用调用进程的环境。

lpCurrentDirectory

指向一个以NULL结尾的字符串,这个字符串用来指定子进程的工作路径。这个字符串必须是一个包含驱动器名的绝对路径。如果这个参数为空,新进程将使用与调用进程相同的驱动器和目录。这个选项是一个需要启动应用程序并指定它们的驱动器和工作目录的外壳程序的主要条件。

lpStartupInfo

指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。

lpProcessInformation

指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。

 

结构体声明如下:

typedef struct_PROCESS_INFORMATION{

HANDLE hProcess;// 返回新进程的句柄

HANDLE hThread;// 返回主线程的句柄。

DWORD dwProcessId;// 返回一个全局进程标识符。该标识符用于标识一个进程。从进程被创建到终止,该值始终有效。

DWORD dwThreadId;// 返回一个全局线程标识符。该标识符用于标识一个线程。从线程被创建到终止,该值始终有效。

}PROCESS_INFORMATION;

 

返回值:

如果函数执行成功,返回非零值。

如果函数执行失败,返回零

 

备注:

创建并启动一个新进程。如果恶意代码创建了一个新进程,你需要同时分析这个新进程。

 

kernel32!CreateRemoteThread

功能:创建一个在其它进程地址空间中运行的线程(也称:创建远程线程)

 

函数原型:

HANDLE WINAPI CreateRemoteThread(

__in HANDLE hProcess,

__in LPSECURITY_ATTRIBUTES lpThreadAttributes,

__in SIZE_T dwStackSize,

__in LPTHREAD_START_ROUTINE lpStartAddress,

__in LPVOID lpParameter,

__in DWORD dwCreationFlags,

__out LPDWORD lpThreadId

);

 

参数介绍:

hProcess [in]

线程所属进程的进程句柄.

该句柄必须具有 PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITE,和PROCESS_VM_READ 访问权限.

lpThreadAttributes [in]

一个指向 SECURITY_ATTRIBUTES 结构的指针, 该结指定了线程的安全属性.

dwStackSize [in]

线程初始大小,以字节为单位,如果该值设为0,那么使用系统默认大小.

lpStartAddress [in]

在远程进程的地址空间中,该线程的线程函数的起始地址.

lpParameter [in]

传给线程函数的参数.

dwCreationFlags [in]

线程的创建标志.

lpThreadId [out]

指向所创建线程句柄的指针,如果创建失败,该参数为NULL.

 

返回值:

如果调用成功,返回新线程句柄.

如果失败,返回NULL.

 

备注:

用来在一个远程进程中启动一个线程。启动器和隐蔽性恶意代码通常使用这个函数,将代码注入到其他进程中执行。

 

kernel32!CreateToolhelp32Snapshot

功能:通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照.

 

函数原型:

HANDLE WINAPI CreateToolhelp32Snapshot(

DWORD dwFlags,

DWORD th32ProcessID

);

 

参数说明:

dwFlags, 用来指定“快照”中需要返回的对象,可以是TH32CS_SNAPPROCESS等

th32ProcessID 一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取 当前进程快照时可以设为0

 

返回值:

调用成功,返回快照的句柄,调用失败,返回INVALID_HANDLE_VALUE 。

 

备注:

用来创建一个进程,堆空间,线程和模块的快照。恶意代码经常使用这个函数,在多个进程或线程之间传播感染。

 

kernel32!EnumProcesses

功能:检索进程中的每一个进程标识符.

 

函数原型:

BOOL WINAPI EnumProcesses(

_Out_ DWORD * pProcessIds,

_In_ DWORD CB,

_Out_ DWORD * pBytesReturned

);

 

参数介绍:

pProcessIds接收进程标识符的数组

cb数组的大小.

pBytesReturned数组返回的字节数.

 

返回值:

成功返回非零数,失败返回零,可以使用函数 GetLastError获取错误信息.

 

备注:

用来在系统上枚举运行进程的函数,恶意代码经常枚举进程来找到一个可以注入的进程。

 

kernel32!EnumProcessModules

功能:枚举进程模块

 

函数原型:

BOOL WINAPI EnumProcessModules(

_In_  HANDLE  hProcess,

_Out_ HMODULE *lphModule,

_In_  DWORD   cb,

_Out_ LPDWORD lpcbNeeded

);

 

参数介绍:

hProcess:要枚举的进程的句柄

lphModule:该进程所包含的模块句柄的数组,我们可以定义一个数组来接受该进程所含有的//模块句柄

cb:lphModule数组的大小

lpcbNeeded:该进程实际的模块的数量,以字节来计数

 

返回值:

成功返回非0,失败返回0

 

备注:

用来枚举给定进程的已装载模块(可执行文件和DLL程序),恶意代码在进行注入时经常枚举模块

 

kernel32!IsWow64Process

功能:确定指定进程是否运行在64位操作系统的32环境(Wow64)下

 

函数原型:

BOOL WINAPI IsWow64Process( __in HANDLE hProcess, __out PBOOL Wow64Process );

 

参数介绍:

hProcess:进程句柄。该句柄必须具有PROCESS_QUERY_INFORMATION 或者 PROCESS_QUERY_LIMITED_INFORMATION 访问权限

Wow64Process:指向一个bool值,如果该进程是32位进程,运行在64操作系统下,该值为true,否则为false。如果该进程是一个64位应用程序,运行在64位系统上,该值也被设置为false。

 

返回值:

如果函数成功返回值为非零值。如果该函数失败,则返回值为零

 

备注:

由一个32位进程使用,来确定它是否运行在64位操作系统上

 

ntdll!ZwQueryInformationProcess

功能:返回特定进程的信息

 

函数原型:

NTSTATUS WINAPI ZwQueryInformationProcess(  _In_      HANDLE           ProcessHandle,  _In_      PROCESSINFOCLASS ProcessInformationClass,  _Out_     PVOID            ProcessInformation,  _In_      ULONG            ProcessInformationLength,  _Out_opt_ PULONG           ReturnLength);

 

参数介绍:

ProcessHandle:需要查询的进程的句柄。

ProcessInformationClass:需要查询的进程信息的类型。

ProcessInformation:接收进程信息的缓冲区

ProcessInformationLength:ProcessInformation内容的大小。

ReturnLength:返回信息的大小。

 

返回值:

成功返回STATUS_SUCCESS,失败返回错误码

 

备注:

返回关于一个特定进程的不同信息。这个函数通常在反调试技术中被使用。

 

kernel32!OpenProcess

功能:用来打开一个已存在的进程对象,并返回进程的句柄

 

函数原型:

HANDLE OpenProcess(

DWORD dwDesiredAccess,

BOOL bInheritHandle,

DWORD dwProcessId

);

 

参数介绍:

dwDesiredAccess:渴望得到的访问权限(标志)

bInheritHandle:是否继承句柄

dwProcessId:进程标示符

 

返回值:

如成功,返回值为指定进程的句柄。

如失败,返回值为空

 

备注:

打开系统上运行其他进程的句柄。这个句柄可以被用来向其他进程内存中读写数据,或是注入代码到其他进程中。

 

kernel32!PeekNamedPipe

功能:预览一个管道中的数据,或取得与管道中的数据有关的信息。

 

函数原型:

BOOL WINAPI PeekNamedPipe(

__in HANDLE hNamedPipe, //管道句柄

__out_opt LPVOID lpBuffer, //读取输出缓冲区,可选

__in DWORD nBufferSize, //缓冲区大小

__out_opt LPDWORD lpBytesRead, //接收从管道中读取数据的变量的指针,可选

__out_opt LPDWORD lpTotalBytesAvail, //接收从管道读取的字节总数

__out_opt LPDWORD lpBytesLeftThisMessage

);

 

参数介绍:

hNamedPipe :管道句柄。这个参数可以是一个命名管道实例句柄,返回,由CreateNamedPipe或CreateFile函数,或者它可以是一个匿名管道的读端句柄,返回由CREATEPIPE功能。句柄必须有GENERIC_READ权限的管道。

lpBuffer :接收从管道读取数据的缓冲区的指针。如果没有数据要读取,此参数可以为NULL。

nBufferSize:lpBuffer参数以字节为单位,由指定的缓冲区大小。如果lpBuffer是NULL,则忽略此参数。

lpBytesRead :接收从管道中读取的字节数的变量的指针。此参数可以为NULL,如果没有数据要读取。

lpTotalBytesAvail :一个指针变量,接收从管道读取的字节总数。此参数可以为NULL,如果没有数据要读取。

lpBytesLeftThisMessage :指向剩余的字节数的变量的指针消息。此参数将是零字节类型的命名管道或匿名管道。此参数可以为NULL,如果没有数据要读取。

 

返回值:

非零表示成功,零表示失败

 

备注:

用来从一个命名管道中复制数据,而无须从管道中移除数据。这个函数在反向shell中很常用。

 

kernel32!Process32First

功能:是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用process32First函数来获得第一个进程的句柄。

 

函数原型:

BOOL WINAPI Process32First(

HANDLE hSnapshot,

LPPROCESSENTRY32 lppe

)

 

参数介绍:

hSnapshot:调用 CreateToolhelp32Snapshot返回的快照句柄。

lppe:指向PROCESSENTRY32结构体

 

结构体声明如下:

typedef struct tagPROCESSENTRY32

{

DWORD dwSize;//结构体的大小

DWORD cntUsage;// 此进程的引用计数

DWORD th32ProcessID;

ULONG_PTR th32DefaultHeapID;// 进程默认堆ID

DWORD th32ModuleID;// 进程模块ID

DWORD cntThreads;// 此进程开启的线程计数

DWORD th32ParentProcessID;

LONG pcPriClassBase;// 线程优先权

DWORD dwFlags;// 这个成员已经不再被使用,总是设置为零

TCHAR szExeFile[MAX_PATH];// 进程全名

} PROCESSENTRY32, *PPROCESSENTRY32;

 

返回值:

成功返回true,失败返回FALSE

 

备注:

在调用CreateToolhelp32Snapshot之后,使用此函数和Process32Next来枚举进程。恶意代码通常枚举进程,来找到一个可以注入的进程。

 

kernel32!Process32Next

功能:当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用Process32Next函数来获得下一个进程的句柄。

 

函数原型:

BOOLWINAPIProcess32Next(

__in HANDLEhSnapshot,

__out LPPROCESSENTRY32lppe

);

 

参数介绍:

hSnapshot:从CreateToolhelp32Snapshot 返回的句柄。

Lppe:指向PROCESSENTRY32结构的指针。

 

返回值:

成功返回TRUE,失败返回FALSE。

 

备注:

在调用CreateToolhelp32Snapshot之后,使用此函数和Process32First来枚举进程。恶意代码通常枚举进程,来找到一个可以注入的进程。

 

kernel32!ReadProcessMemory

功能:根据进程句柄读入该进程的某个内存空间

 

函数原型:

BOOL ReadProcessMemory(

HANDLE hProcess,

PVOID  pvAddressRemote,

PVOID   pvBufferLocal,

DWORD  dwSize,

PDWORD pdwNumBytesRead

);

 

参数介绍:

hProcess [in]远程进程句柄。 被读取者

pvAddressRemote [in]远程进程中内存地址。 从具体何处读取

pvBufferLocal [out]本地进程中内存地址. 函数将读取的内容写入此处

dwSize [in]要传送的字节数。要写入多少

pdwNumBytesRead [out]实际传送的字节数. 函数返回时报告实际写入多少

 

返回值:

成功返回1,失败返回0.

 

备注:

用来从远程进程中读取内存。

 

kernel32!ResumeThread

功能:恢复挂起的线程

 

函数原型:

DWORD WINAPI ResumeThread( __in HANDLE hThread);

 

参数介绍:

hThread:需要恢复的线程的句柄。

 

返回值:

成功返回线程先前的挂起次数,失败返回-1.

 

备注:

继续之前挂起的线程。此函数在几种注入技术中都会被使用。

 

kernel32!SetThreadContext

功能:修改给定线程的上下文

 

函数原型:

BOOL WINAPI SetThreadContext(  _In_ HANDLE  hThread,  _In_ const CONTEXT *lpContext);

 

参数介绍:

hThread:目标线程的句柄

lpContext:目标线程的上下文

 

返回值:

修改成功,返回非0,失败返回0

 

备注:

一些注入技术会使用这个函数。

 

shell32!ShellExecute

功能:运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制

 

函数原型:

HINSTANCE ShellExecute(  _In_opt_ HWND    hwnd,  _In_opt_ LPCTSTR lpOperation,  _In_     LPCTSTR lpFile,  _In_opt_ LPCTSTR lpParameters,  _In_opt_ LPCTSTR lpDirectory,  _In_     INT     nShowCmd);

 

参数介绍:

Hwnd:指定父进程句柄

lpOperation:指定动作,例如:open、runas、print、edit、explore、find

lpFile:指定要打开的文件或程序

lpParameters:给要打开的程序指定的参数,如果打开的是文件,这里应该是null

lpDirectory。缺省目录

nShowCmd:打开选项

 

返回值:

成功返回应用程序句柄。失败返回相应的错误码

 

备注:

用来执行另一个程序,如果恶意代码创建了一个新的进程,需要分析这个新进程。

 

kernel32!SuspendThread

功能:暂停指定的线程

 

函数原型:

DWORD WINAPI SuspendThread(   _In_HANDLE hThread   );

 

参数介绍:

hThread:需要暂停的线程的句柄

 

返回值:

如果成功,返回线程先前的挂起计数,失败返回-1

 

备注:

挂起一个线程,使得他停止运行。恶意代码有时会挂起一个线程,铜鼓代码注入技术来修改它。

 

kernel32!Thread32First

功能:返回进程中第一个线程的信息

 

函数原型:

BOOL WINAPI Thread32First(  _In_    HANDLE          hSnapshot,  _Inout_ LPTHREADENTRY32 lpte);

 

参数介绍:

hSnapshot 句柄从先前的调用返回的快照CreateToolhelp32Snapshot功能。

lpte 一个指向一个THREADENTRY32结构。

 

返回值:

如果第一个条目的线程列表复制到缓冲区返回TRUE,否则返回FALSE。

 

备注:

用来轮询一个进程的所有线程。注入器会使用这些函数来找出可供注入的合适线程。

 

kernel32!Thread32Next

功能:返回进程中下一个线程的信息

 

函数原型:

BOOL WINAPI Thread32Next(  _In_  HANDLE          hSnapshot,  _Out_ LPTHREADENTRY32 lpte);

 

参数介绍:

hSnapshot 句柄从先前的调用返回的快照CreateToolhelp32Snapshot功能。

lpte 一个指向一个THREADENTRY32结构。

 

返回值:

如果下一个条目的线程列表复制到缓冲区返回TRUE,否则返回FALSE。

 

备注:

用来轮询一个进程的所有线程。注入器会使用这些函数来找出可供注入的合适线程。

 

kernel32!WinExec

功能:运行指定的程序

 

函数原型:

UINT WINAPI WinExec(  _In_ LPCSTR lpCmdLine,  _In_ UINT   uCmdShow);

 

参数介绍:

lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。

uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。

 

返回值:

返回值大于31表示成功,否则返回相应的错误码

 

备注:

 

kernel32!WriteProcessMemory

功能:写入某一进程的内存区域。入口区必须可以访问,否则操作将失败

 

函数原型:

BOOL WriteProcessMemory(

HANDLE hProcess,

LPVOID lpBaseAddress,

LPVOID lpBuffer,

DWORD nSize,

LPDWORD lpNumberOfBytesWritten

);

 

参数介绍:

hProcess由OpenProcess返回的进程句柄。

如参数传数据为 INVALID_HANDLE_VALUE 【即-1】目标进程为自身进程

lpBaseAddress要写的内存首地址,再写入之前,此函数将先检查目标地址是否可用,并能容纳待写入的数据。

lpBuffer指向要写的数据的指针。

nSize要写入的字节数。

 

返回值:

非零代表成功,零代表失败

 

备注:

用来向远程进程写数据的函数,恶意代码在进程注入中会用到此函数。

 

Rpccrt4!RpcServrRegisterIf

功能:注册与RPC运行时库的接口。

 

函数原型:

RPC_STATUS RPC_ENTRY RpcServerRegisterIf(

RPC_IF_HANDLE IfSpec,

UUID          *MgrTypeUuid,

RPC_MGR_EPV   *MgrEpv

);

 

参数介绍:

IfSpec:表名要注册的接口

MgrTypeUuid: 指向与MgrEpv参数关联的类型UUID的指针

MgrEpv:例程的入口点向量,使用MIDL生成默认的EPV

 

返回值:

成功返回RPC_S_OK

 

Rpccrt4!RpcServerListen

功能:指示RPC运行时库来监听远程过程调用

 

函数原型:

RPC_STATUS RPC_ENTRY RpcServerListen(

unsigned int MinimumCallThreads,

unsigned int MaxCalls,

unsigned int DontWait

);

 

参数介绍:

MinimumCallThreads:指定应在给定服务器中创建和维护的最小调用线程数

MaxCalls:建议服务器可以执行的并发远程过程调用的最大数量

DontWait:控制从RpcServerListen返回的标志。 非零值表示完成功能处理后,RpcServerListen应立即返回。 值为零表示RpcServerListen不会返回,直到RpcMgmtStopServerListening函数已被调用并且所有远程调用都已完成。

 

返回值:

Value Meaning
RPC_S_OK 成功
RPC_S_ALREADY_LISTENING 服务端已经在监听
RPC_S_NO_PROTSEQS_REGISTERED 没有注册协议序列
RPC_S_MAX_CALLS_TOO_SMALL MaxCalls值太小

 

Rpccrt4!RpcServerUseProtseqEp

功能:告诉RPC运行时库使用指定的协议序列与指定的端点组合来接收远程过程调用。

 

函数原型:

RPC_STATUS RPC_ENTRY RpcServerUseProtseqEp(

unsigned char *Protseq,

unsigned int  MaxCalls,

unsigned char *Endpoint,

void          *SecurityDescriptor

);

 

参数介绍:

Protseq:指向要向RPC运行时库中注册的协议序列的字符串标识符

MaxCalls:ncacn_ip_tcp协议序列的积压队列长度。 所有其他协议序列忽略此参数。 使用RPC_C_PROTSEQ_MAX_REQS_DEFAULT指定默认值

Endpoint:指向用于创建Protseq参数中指定的协议序列的绑定的端点地址信息。

SecurityDescriptor:指向为安全子系统提供的可选参数。 仅用于ncacn_np和ncalrpc协议序列

 

返回值:

Value Meaning
RPC_S_OK 成功
RPC_S_PROTSEQ_NOT_SUPPORTED 此主机不支持协议序列
RPC_S_INVALID_RPC_PROTSEQ 协议序列无效
RPC_S_INVALID_ENDPOINT_FORMAT 端点格式无效
RPC_S_OUT_OF_MEMORY 系统内存不足
RPC_S_DUPLICATE_ENDPOINT 端点是重复的
RPC_S_INVALID_SECURITY_DESC 安全描述符无效

 

Rpccrt4!RpcMgmtStopServerListening

功能:告诉服务端停止对RPC的监听

 

函数原型:

RPC_STATUS RPC_ENTRY RpcMgmtStopServerListening(

RPC_BINDING_HANDLE Binding

);

 

参数介绍:

Binding:要指示远程应用程序停止监听远程过程调用,请为该应用程序指定服务器绑定句柄。 要指导您自己的(本地)应用程序停止监听远程过程调用,请指定一个NULL值。

 

返回值:

Value Meaning
RPC_S_OK 成功
RPC_S_INVALID_BINDING 绑定的句柄无效
RPC_S_WRONG_KIND_OF_BINDING 对操作的错误的约束。

 

Rpccrt4!RpcServerUnregisterIf

功能:从RPC运行时库注册表中删除一个接口

 

函数原型:

RPC_STATUS RPC_ENTRY RpcServerUnregisterIf(

RPC_IF_HANDLE IfSpec,

UUID          *MgrTypeUuid,

unsigned int  WaitForCallsToComplete

);

 

参数介绍:

IfSpec:从注册表中删除的界面

MgrTypeUuid:指向要从注册表中删除的EPV的UUID类型的指针

WaitForCallsToComplete:指示是否立即从注册表中删除接口或等待所有当前调用完成的标志。

 

返回值:

Value Meaning
RPC_S_OK 成功
RPC_S_UNKNOWN_MGR_TYPE manager类型未知
RPC_S_UNKNOWN_IF interface未知

 

Rpccrt4!RpcStringBindingCompose

功能:创建一个字符串绑定句柄。

 

函数原型:

RPC_STATUS RPC_ENTRY RpcStringBindingCompose(

TCHAR *ObjUuid,

TCHAR *ProtSeq,

TCHAR *NetworkAddr,

TCHAR *EndPoint,

TCHAR *Options,

TCHAR **StringBinding

);

 

参数介绍:

ObjUuid:指向对象UUID的以空值终止的字符串的指针

ProtSeq:指向协议序列的以null结尾的字符串。

NetworkAddr:指向网络地址的以null结尾的字符串

EndPoint:指向端点的以null结尾的字符串

Options:指向网络选项的以null结尾的字符串

StringBinding:返回一个指针,指向绑定句柄的以null结尾的字符串的指针。

 

返回值:

Value Meaning
RPC_S_OK 成功
RPC_S_INVALID_STRING_UUID 指明UUID无效

 

Rpccrt4!RpcBindingFromStringBinding

功能:从绑定句柄的字符串表示中返回绑定句柄。

 

函数原型:

RPC_STATUS RPC_ENTRY RpcBindingFromStringBinding(

unsigned char      *StringBinding,

RPC_BINDING_HANDLE *Binding

);

 

参数介绍:

StringBinding:指向绑定句柄的字符串指针。

Binding:返回指向服务器绑定句柄的指针

 

返回值:

Value Meaning
RPC_S_OK 成功
RPC_S_INVALID_STRING_BINDING 字符串绑定无效
RPC_S_PROTSEQ_NOT_SUPPORTED 协议序列不支持
RPC_S_INVALID_RPC_PROTSEQ 协议序列无效
RPC_S_INVALID_ENDPOINT_FORMAT 断点格式无效
RPC_S_STRING_TOO_LONG 字符串太长
RPC_S_INVALID_NET_ADDR 网络地址无效
RPC_S_INVALID_ARG 参数无效
RPC_S_INVALID_NAF_ID 网络地址族标识符无效。

 

Rpccrt4!RpcStringFree

功能:释放由RPC运行库分配的字符串

 

函数原型:

RPC_STATUS RPC_ENTRY RpcStringFree(

unsigned char **String

);

 

参数介绍:

String:指向要释放的字符串

 

返回值:

成功返回RPC_S_OK

 

Rpccrt4!RpcExceptionCode

功能:返回一个code,标识异常出现的类型。

 

函数原型:

unsigned long RpcExceptionCode(void);

 

返回值:

可能的返回值包括由RPC函数返回的前缀为“RPC_S_”和“RPC_X”的错误代码集以及Windows操作系统返回的异常集。

头像
  • ¥ 149.0元
  • 市场价:299.0元
  • ¥ 15.0元
  • 市场价:15.0元
  • ¥ 99.0元
  • 市场价:199.0元
  • ¥ 49.0元
  • 市场价:199.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: