這些東西 本來感覺沒有什麼搞得必要 但是 感覺很多書 都介紹了一些 我也就跟著做一下吧。。。。
獲取系統的時間 這個 應該是是最簡單的
直接看** 就ok
#include "stdafx.h"
#include int _tmain(int argc, _tchar* ar**)
關於 systemtime 這個結構體 可以直接看宣告
typedef struct _systemtime systemtime, *psystemtime, *lpsystemtime;
想列印那部分 就可以列印那部分。。。。。。。
有的 軟體想省事 就用這種方法 來限制使用時間 。。。。。。。。。。
對抗這種方法最簡單的就是直接 修改系統時間就ok了。。。。。
然後 就是定時器 這下面的**是 windows 程式設計 第三版 的 源**
#include lresult __stdcall wndproc(hwnd, uint, wparam, lparam);
int __stdcall winmain(hinstance hinstance, hinstance hprevinstance, lpstr lpcmdline, int nshowcmd)
return 1;
}#define idt_timer1 1
// 訊息處理函式
lresult __stdcall wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)
break;
case wm_lbuttondown: // 使用者單擊滑鼠左鍵
if(bsettimer)
else
else
}break;
case wm_close: // 使用者要求關閉視窗
if(bsettimer)
::killtimer(hwnd, idt_timer1);
break;
case wm_destroy: // 視窗正在被銷毀
::postquitmessage(0);
break;
} return ::defwindowproc(hwnd, message, wparam, lparam);
}
千萬不要以為 定時器 和sleep是等價的 ~~~~~~~ 這兩者是不同的
然後下面是 windows驅動開發技術詳解的 所寫的東西
io 定時器
#include#define timer_out 3
#define ioctl_stop ctl_code(\
file_device_unknown, \
0x801, \
method_in_direct, \
file_any_access)
#define ioctl_start_timer ctl_code(\
file_device_unknown, \
0x800, \
method_buffered, \
file_any_access)
typedef struct _device_extension device_extension, *pdevice_extension;
void ontimer(
in pdevice_object deviceobject,
in pvoid context)
peprocess peprocess = iogetcurrentprocess();
ptstr processname = (ptstr)((ulong)peprocess + 0x174);//即可得到使用者程序
kdprint(("the current process is %s\n", processname));
}void unload(in pdriver_object pdriverobject)
kdprint(("解除安裝完成!\n"));
}ntstatus deviceiocontrol(in pdevice_object pdriverobject,
in pirp pirp)
pirp->iostatus.status = status_success;
pirp->iostatus.information = info; // bytes xfered
iocompleterequest(pirp, io_no_increment);
return status_success;
}ntstatus dispatchroutin(in pdevice_object pdriverobject,
in pirp pirp
)ntstatus creatdriver(in pdriver_object pdriverobject)
pder_object->flags |= do_direct_io;
pder_etx = (pdevice_extension)pder_object->deviceextension;
pder_etx->pdevice = pder_object;
pder_etx->ustrdevicename = devname;
ioinitializetimer(pder_object, ontimer, null);
unicode_string symlinkname;
rtlinitunicodestring(&symlinkname, l"\\??\\helloddk");
pder_etx->ustrsymlinkname = symlinkname;
ntstatus = iocreatesymboliclink(&symlinkname, &devname);
if (!nt_success(ntstatus))
return status_success;
}ntstatus driverentry(
in pdriver_object pdriverobject,
in punicode_string pregistrypath)
status=creatdriver(pdriverobject);
if (!nt_success(status))
return status_success;
}
#include #include //使用ctl_code必須加入winioctl
#include #define ioctl_start_timer ctl_code(\
file_device_unknown, \
0x800, \
method_buffered, \
file_any_access)
#define ioctl_stop ctl_code(\
file_device_unknown, \
0x801, \
method_in_direct, \
file_any_access)
int main()
dword dwoutput;
deviceiocontrol(hdevice, ioctl_start_timer, null, 0, null, 0, &dwoutput, null);
sleep(10000);
deviceiocontrol(hdevice, ioctl_stop, null, 0, null, 0, &dwoutput, null);
closehandle(hdevice);
getchar();
getchar();
return 0;
}
這個是效果圖
然後下面 第10章的內容等到 明天再寫 繼續擼pwn。。。。。。。。。。。。。
繼續往下寫 。。
io 計時器 太過古板 不夠靈活 那麼 下面就有了 dpc定時器 這個可以在任何時間都進行定時
所謂的 dpc就是用定時器物件timer 當定時器設定乙個時間間隔後 沒過一段時間都會將乙個dpc 歷程 插入dpc佇列
我猜這個dpc 佇列 和 apc佇列差不多 當間隔了這段時間 作業系統就會將乙個dpc 歷程插入dpc 佇列 當作業系統讀取dpc 佇列時 對應的dpc例程就會執行
如果 時間是正數 那麼代表 就是絕對時間 比如人 1999 1 1 如果是負數 就代表間隔多少時間
關於定時器
定時器是個很有意思的東西,它很有用,但我認為這不是現代計算機的結構所擅長的事情。計算機適合做那些很大量的簡單重複工作,或者根據請求做出回應。dos時代是沒有程序執行緒等概念的,那時候要想做到定時真是有些麻煩 通常的做法是死迴圈不斷監測時間,發現時間到了就做特定的事情 當然你可以用delay,來指定等...
關於定時器
今天突然想到乙個問題,如果要設定乙個5分鐘的定時器,那麼時間使用5 minute和5 60 second有什麼區別呢?或者說,設定成後者,程式會不會更累呢,會不會每秒鐘都去檢查下是不是到期了?於是去翻了一下golang原始碼中time的newtimer部分,如下 原來人家這兒用的是duration,...
nodejs 關於定時器 隨機時間
這裡設定時間為1 10分鐘內的隨機時間,早上8點到晚上23點結束 測試noide定時任務 var cron require cron var axios require axios var addmysql require db mysqlservice.js var datalist var da...