Witam. W c++ na co dzień nie piszę i nie ukrywam że nie jestem w tym dobry, jednak muszę w programie Javowym zmienić datę systemową. Ponieważ Windows7 wymaga do tej operacji uprawnień administratora nie mogę zrobić tego za pomocą commandline'a. Postanowiłem więc spróbować zrobić to w c++. Przy wywołaniu funkcji createProcessAsUserA otrzymywałem błąd:
Unhandled exception at 0x7c902128 in TimeT.exe: 0xC0000005: Access violation reading location 0x00000000.
Podejrzewam że z powodu braku inicjalizacji składowych LPSTARTUPINFOA.
Kiedy jednak próbuję przypisać wartości tym polom dostaję błąd kompilacji:
1>TimeT.cpp 1>.\TimeT.cpp(32) : error C2227: left of '->lpDesktopL' must point to class/struct/union
Z góry dziękuję za pomoc.
Pozdrawiam
// TimeT.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iomanip>
#include <iostream>
#include <windows.h>
#include <winbase.h>
#include <userenv.h>
using namespace std;
class TimeT
{
public:
int main();
bool zmien();
};
int main()
{
TimeT* t = new TimeT();
t->zmien();
}
bool TimeT::zmien()
{
HANDLE HAND;
int result = LogonUserA("tomo", ".", "tomek", 2, 0, &HAND);
cout << result;
PROCESS_INFORMATION pi;
LPSTARTUPINFOA* si;
si = new LPSTARTUPINFOA();
si->lpDesktopL = "winsta0\\default";
//si.cb = sizeof(si);
//si.dwFlags = STARTF_USESHOWWINDOW;
//si.wShowWindow = SW_HIDE;
//si.lpTitle = L"System";
if (INVALID_HANDLE_VALUE != HAND)
{
result = CreateProcessAsUserA(HAND,
"",
"cmd",
0,
0,
false,
NORMAL_PRIORITY_CLASS,
0,
0,
*si,
&pi);
}
/*if(result)
{
SYSTEMTIME st;
st.wYear = 2000;
st.wMonth = 5;
st.wDay = 12;
st.wHour = 16;
st.wMinute = 8;
st.wSecond = 31;
st.wMilliseconds = 55;
::SetSystemTime(&st);
}*/
//cout << GetLastError();
system("pause");
return true;
}