* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: userinit.c,v 1.6 2004/12/22 01:20:52 navaraf Exp $
- *
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Userinit Logon Application
* FILE: subsys/system/userinit/userinit.c
* PROGRAMMERS: Thomas Weidenmueller (w3seek@users.sourceforge.net)
*/
#include <windows.h>
+#include <cfgmgr32.h>
+#include "resource.h"
+#define CMP_MAGIC 0x01234567
/* GLOBALS ******************************************************************/
DWORD Type, Size;
WCHAR Shell[MAX_PATH];
BOOL Ret = FALSE;
-
- if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- L"SOFTWARE\\ReactOS\\Windows NT\\CurrentVersion\\Winlogon",
+
+ if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+ L"SOFTWARE\\ReactOS\\Windows NT\\CurrentVersion\\Winlogon",
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
Size = MAX_PATH * sizeof(WCHAR);
}
RegCloseKey(hKey);
}
-
+
if(!Ret)
{
if(GetWindowsDirectory(CommandLine, MAX_PATH - 13))
else
wcscpy(CommandLine, L"explorer.exe");
}
-
+
return Ret;
}
PROCESS_INFORMATION pi;
WCHAR Shell[MAX_PATH];
WCHAR ExpandedShell[MAX_PATH];
-
+ TCHAR szMsg[RC_STRING_MAX_SIZE];
+
GetShell(Shell);
-
+
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
-
+
ExpandEnvironmentStrings(Shell, ExpandedShell, MAX_PATH);
-
+
if(CreateProcess(NULL,
ExpandedShell,
NULL,
CloseHandle(pi.hThread);
}
else
- MessageBox(0, L"Userinit failed to start the shell!\n", NULL, 0);
+ {
+ LoadString( GetModuleHandle(NULL), STRING_USERINIT_FAIL, szMsg, sizeof(szMsg) / sizeof(szMsg[0]));
+ MessageBox(0, szMsg, NULL, 0);
+ }
}
static
HKEY hKey;
DWORD Type, Size;
WCHAR szWallpaper[MAX_PATH + 1];
-
+
if(RegOpenKeyEx(HKEY_CURRENT_USER,
L"Control Panel\\Desktop",
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
}
}
+
+typedef DWORD (WINAPI *PCMP_REPORT_LOGON)(DWORD, DWORD);
+
+static VOID
+NotifyLogon(VOID)
+{
+ HINSTANCE hModule;
+ PCMP_REPORT_LOGON CMP_Report_LogOn;
+
+ hModule = LoadLibrary(L"setupapi.dll");
+ if (hModule)
+ {
+ CMP_Report_LogOn = (PCMP_REPORT_LOGON)GetProcAddress(hModule, "CMP_Report_LogOn");
+ if (CMP_Report_LogOn)
+ CMP_Report_LogOn(CMP_MAGIC, GetCurrentProcessId());
+
+ FreeLibrary(hModule);
+ }
+}
+
+
+#ifdef _MSC_VER
+#pragma warning(disable : 4100)
+#endif /* _MSC_VER */
+
int WINAPI
WinMain(HINSTANCE hInst,
- HINSTANCE hPrevInstance,
- LPSTR lpszCmdLine,
- int nCmdShow)
+ HINSTANCE hPrevInstance,
+ LPSTR lpszCmdLine,
+ int nCmdShow)
{
+ NotifyLogon();
SetUserSettings();
StartShell();
return 0;