文章作者:xuanliang[E.S.T]
信息来源:邪恶八进制 中国
复制内容到剪贴板
代码:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int ShowError( const char *pErrMsg, DWORD dwErrorCode )
{
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, dwErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpMsgBuf, 0, NULL );
printf("%s %s\r\n", pErrMsg, lpMsgBuf );
LocalFree( lpMsgBuf );
return 0;
}
//提升权限
BOOL AdjustPrivilege(LPCTSTR privilege, DWORD attribute)
{
BOOL ret;
HANDLE procToken;
LUID luid;
TOKEN_PRIVILEGES tp;
ret = OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&procToken);
if(!ret)
{
ShowError("\r\nFail to OpenProcessToken.", GetLastError() );
return false;
}
ret = LookupPrivilegeValue(NULL, privilege, &luid);
if(!ret)
{
CloseHandle(procToken);
ShowError("\r\nFail to LookupPrivilegeValue.", GetLastError() );
return false;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(procToken, FALSE, &tp, NULL, NULL, NULL);
if (GetLastError() != ERROR_SUCCESS)
ret = false;
else
ret =true;
CloseHandle(procToken);
return (ret);
}
void DumpTimeStruct(LPSYSTEMTIME st)
{
printf("\r\nYear : %-10d", st->wYear);
printf("\r\nMonth : %-10d ", st->wMonth);
printf("\r\nDay of Week : %-10d ", st->wDayOfWeek);
printf("\r\nDay : %-10d ", st->wDay);
printf("\r\nHour : %-10d ", st->wHour);
printf("\r\nMinute : %-10d ", st->wMinute);
printf("\r\nSecond : %-10d ", st->wSecond);
printf("\r\n----------------------");
}
void Usage(char *msg)
{
printf("|-------------------------------|\n");
printf("| SetTime |\n");
printf("| |\n");
printf("| 2005.1.22 |\n");
printf("|-------------------------------|\n");
printf("usage: %s\n",msg);
//printf(" -ctime\n");
printf(" -stime [year]\n");
return;
}
int main(int argc, char *argv[])
{
SYSTEMTIME st;
if (argc != 3)
{
Usage(argv[0]);
return 0;
}
/*
if(stricmp(argv[1], "-ctime")==0)
{
*/
GetLocalTime(&st);
printf("Current time: ");
DumpTimeStruct(&st);
// return 0;
// }
if(stricmp(argv[1], "-stime") == 0)
{
DWORD Year = atoi(argv[2]);
st.wYear = Year;
if (!AdjustPrivilege(SE_SYSTEMTIME_NAME, SE_PRIVILEGE_ENABLED))
{
ShowError("\r\nFail to AdjustPrivilege.", GetLastError() );
return FALSE;
}
if (!SetLocalTime(&st))
{
ShowError("\r\nFail to SetLocalTime.", GetLastError() );
return FALSE;
}
GetLocalTime(&st);
printf("\r\nNew Current time: \r\n");
DumpTimeStruct(&st);
return 0;
}
return 0;
}