需要利用C语言的时间函数time和localtime,具体说明如下:
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的从化网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
一、函数接口介绍:
1、time函数。
形式为time_t time (time_t *__timer);
其中time_t为time.h定义的结构体,一般为长整型。
这个函数会获取当前时间,并返回。 如果参数__timer非空,会存储相同值到__timer指向的内存中。
time函数返回的为unix时间戳,即从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
由于是秒作为单位的,所以这并不是习惯上的时间,要转为习惯上的年月日时间形式就需要另外一个函数了。
2、localtime函数。
形式为struct tm *localtime (const time_t *__timer);
其中tm为一个结构体,包含了年月日时分秒等信息。
这种结构是适合用来输出的。
二、参考代码:
#include stdio.h
#include time.h
int main ()
{
time_t t;
struct tm * lt;
time (t);//获取Unix时间戳。
lt = localtime (t);//转为时间结构。
printf ( "%d/%d/%d %d:%d:%d\n",lt-tm_year+1900, lt-tm_mon, lt-tm_mday, lt-tm_hour, lt-tm_min, lt-tm_sec);//输出结果
return 0;
}
注意事项:
struct tm中的tm_year 值为实际年减去1900, 所以输出的时候要是lt-tm_year+1900。
是windows.h吧。这个头文件里有好多函数。你确定你都想知道么。
下面就是啦:
有关进程系统权限类
1:函数OpenProcessToken(
HANDLE ProcessHandle,//进程的句柄
DWORD DesiredAccess,//对进程的访问描述
PHANDLE TokenHandle//打开进程令牌的句柄指针
);
这个函数的作用是打开进程令牌
2: 函数LookupPrivilegeValue(
LPCTSTR lpSytemName,//系统名称
LPCTSTR lpName,//特权名称
PLUID lpluid//本地系统唯一的ID号
)
这个函数将返回一个本地系统内独一无二的ID,来用于系统权限的更改,它的第一个参数是系统名,nil表示本系统。第2个参数是特权的名字。第3个参数用来接收函数返回的ID。
3.函数AdjustTokenPrivileges(
HANDLE TokenHandle, //更改权限的令牌环句柄
BOOL DisableAllPrivileges, //是否修改所有权限的标志位
PTOKEN_PRIVILEGES NewState, //新的系统权限信息
DWORD BufferLength, //上一个参数的长度
PTOKEN_PRIVILEGES PreviousState, // 返回更改系统特权以前的权限
PDWORD ReturnLength //上一个参数的长度
);
这个函数用于更改进程的系统权限 ,第1个参数是要更改权限的令牌环句柄。第2个参数如果为true表示更改所有的系统权限 ,false表示更改部分。第3个参数是要更改的系统特权的值。第4个参数是第3个参数的大小。第5个参数返回更改系统特权以前的权限,我们不需要就设为nil。第6个参数是第5个参数的大小。
OpenProcess(
DWORD dwDesiredAccess,//访问标志
BOOL bInheritHandle,//继承句柄标志
DWORD dwProcessId //进程Id
)
这个函数用于修改我们宿主进程的一些属性,这些属性放在第一个参数里面比如说PROCESS_VM_OPEARTION就是允许远程VM操作,即允许VirtualProtectEx和WriteProcessMemory函数操作本进程内存空间。PROCESS_VM_WRITE就是允许远程VM写,即允许WriteProcessMemory函数访问本进程的内存空间。第二个参数是一个标志参数,用来确定返回的句柄是否可以被新的进程继承。我们的程序中设为False。第三个参数需要操作的进程Id,也就是我们的宿主进程的ID。
2:函数VirtualAllocEx(
HANDLE hProcess,//要进行操作的进程句柄,当然是我们的宿主了
LPVOID lpAddress,//分配空间的开始地址
DWORD dwSize,//分配空间的大小
DWORD flAllocationType,//分配空间的类型
DWOrd flProtect//访问保护类型
)
我们使用VirtualAllocEx函数在宿主进程中开辟一块内存空间,用于存放dll的文件名,VirtualAllocEx的第一参数是要操作的进程,第二个是开始地址,第三个是长度,第4,5个是操作参数。其中MEM_COMMIT表示本函数分配的物理内存或者是内存的页面文件,PAGE_READWRITE表示分配的区域内允许读写
函数WriteProcessMemory(
HANDLE hProcess,//所要操作的线程的句柄
LPVOID lpBaseAddress,//开始进行操作的起始地址
LPVOID lpBuffer,//所要写入的Bytes数
LPDWORD lpNuberofBytersWriteen//世纪写入的Bytes数
) 前面的函数在宿主内存中创建号空间后,现在往里面写入dll的名称,而我们的WriteProcessMemory函数就可以胜任这一项工作,WriteProcessMemory函数的第一个参数是需要往内存里面写入dd的进程句柄,第二个参数是 “要进行写操作”的目标内存起始地址,第三个参数是 “需要被写入的数据”的地址,第四个参数是准备要写入的长度,第五个参数是实际操作中写的长度,这个参数是被函数输出的。到这里我们就已经能成功把dll的路径名称写进了宿主的内存空间。
GetProcAddress(
HMODULE hModule, //dll模块的句柄
LPCSTR lpProcName // 函数名称
);
我们用这个函数主要想得到kernel32.dll中的函数LoadLibraryW的入口地址,所以
GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW')就可以了,当然有些细节得符合程序编译器的要求,VC下使用就要改成
GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW")的形式。
CreateRemoteThread (
HANDLE hProcess, //要进行操作的进程句柄,也就是我们的宿主句柄
LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性的指针
DWORD dwStackSize, //初始化堆(stack)的大小
LPTHREAD_START_ROUTINE lpStartAddress,//新建线程函数的指针,或叫做地址
LPVOID lpParameter, //新建线程函数的参数
DWORD dwCreationFlags, //标志位
LPDWORD lpThreadId //线程返回值
);
这个函数就是本文的点睛之笔了,我们之前所做所有的一切,都是在为它做准备工作,它的功能就是在其他任何进程中创建新的线程,让其他的程序或进程附加执行我们的代码。
CreateRemoteThread函数的第一个参数是要操作的宿主进程句柄;第二个参数为线程安全参数的指针,这里设为nil;第三个参数为初始化堆(stack)的大小,这里设0;第四个参数为新建线程函数的指针或叫做地址或叫入口;第五个参数为新建线程函数的参数,这里就是我们的dll路径名称;第六个参数是标志位,这里设0;第七个参数是线程返回值。
主调函数,作为程序如口,进行程序运算,其中部分语句调用已定义的其他函数的一段程序。
被调函数:被调用的函数为被调函数,调用该函数的函数为主调函数。它一般在主调函数的程序体内使用函数名调用,在外部进行定义。所以在主调函数内不存在函数定义,只存在名字。
举例:
main()
{ float a,b;
int c;
scanf("%f,%f",a,b);
c=max(a,b);
printf("Max is %d\n",c);
}
int max(float x, float y)
{ float z;
z=xy?x:y;
return(z);
}
其中main(){}是主调函数,因为其中“c=max(a,b);”调用了 被调函数 max。
程序中只能有个 main(){}(即主函数),但可以有多个 子函数。
主函数可以调用子函数,子函数可以相互调用。
被调用的函数为被调函数,调用该函数的函数为主调函数。
你这个不是纯C 应该是UDF
DEFINE_ADJUST类似于C的函数。
printf放到{}外面 就是在函数外面了。
这个是不支持的。