需要利用C語言的時間函數time和localtime,具體說明如下:
創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站制作、成都網站設計、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的從化網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
一、函數接口介紹:
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吧。這個頭文件里有好多函數。你確定你都想知道么。
下面就是啦:
有關進程系統(tǒng)權限類
1:函數OpenProcessToken(
HANDLE ProcessHandle,//進程的句柄
DWORD DesiredAccess,//對進程的訪問描述
PHANDLE TokenHandle//打開進程令牌的句柄指針
);
這個函數的作用是打開進程令牌
2: 函數LookupPrivilegeValue(
LPCTSTR lpSytemName,//系統(tǒng)名稱
LPCTSTR lpName,//特權名稱
PLUID lpluid//本地系統(tǒng)唯一的ID號
)
這個函數將返回一個本地系統(tǒng)內獨一無二的ID,來用于系統(tǒng)權限的更改,它的第一個參數是系統(tǒng)名,nil表示本系統(tǒng)。第2個參數是特權的名字。第3個參數用來接收函數返回的ID。
3.函數AdjustTokenPrivileges(
HANDLE TokenHandle, //更改權限的令牌環(huán)句柄
BOOL DisableAllPrivileges, //是否修改所有權限的標志位
PTOKEN_PRIVILEGES NewState, //新的系統(tǒng)權限信息
DWORD BufferLength, //上一個參數的長度
PTOKEN_PRIVILEGES PreviousState, // 返回更改系統(tǒng)特權以前的權限
PDWORD ReturnLength //上一個參數的長度
);
這個函數用于更改進程的系統(tǒng)權限 ,第1個參數是要更改權限的令牌環(huán)句柄。第2個參數如果為true表示更改所有的系統(tǒng)權限 ,false表示更改部分。第3個參數是要更改的系統(tǒng)特權的值。第4個參數是第3個參數的大小。第5個參數返回更改系統(tǒng)特權以前的權限,我們不需要就設為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表示分配的區(qū)域內允許讀寫
函數WriteProcessMemory(
HANDLE hProcess,//所要操作的線程的句柄
LPVOID lpBaseAddress,//開始進行操作的起始地址
LPVOID lpBuffer,//所要寫入的Bytes數
LPDWORD lpNuberofBytersWriteen//世紀寫入的Bytes數
) 前面的函數在宿主內存中創(chuàng)建號空間后,現(xiàn)在往里面寫入dll的名稱,而我們的WriteProcessMemory函數就可以勝任這一項工作,WriteProcessMemory函數的第一個參數是需要往內存里面寫入dd的進程句柄,第二個參數是 “要進行寫操作”的目標內存起始地址,第三個參數是 “需要被寫入的數據”的地址,第四個參數是準備要寫入的長度,第五個參數是實際操作中寫的長度,這個參數是被函數輸出的。到這里我們就已經能成功把dll的路徑名稱寫進了宿主的內存空間。
GetProcAddress(
HMODULE hModule, //dll模塊的句柄
LPCSTR lpProcName // 函數名稱
);
我們用這個函數主要想得到kernel32.dll中的函數LoadLibraryW的入口地址,所以
GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW')就可以了,當然有些細節(jié)得符合程序編譯器的要求,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 //線程返回值
);
這個函數就是本文的點睛之筆了,我們之前所做所有的一切,都是在為它做準備工作,它的功能就是在其他任何進程中創(chuàng)建新的線程,讓其他的程序或進程附加執(zhí)行我們的代碼。
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放到{}外面 就是在函數外面了。
這個是不支持的。