ReactOS  0.4.14-dev-52-g6116262
logoff.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS logoff utility
4  * FILE: base/applications/logoff/logoff.c
5  * PURPOSE: Logoff current session, or another session, potentially on another machine
6  * AUTHOR: 30.07.2007 - Frode Lillerud
7  */
8 
9 /* Note
10  * This application is a lightweight version of shutdown.exe. It is intended
11  * to be function-compatible with Windows' system32\logoff.exe application.
12  */
13 
14 #include <stdio.h>
15 
16 #include <windef.h>
17 #include <winbase.h>
18 #include <winuser.h>
19 
20 #include <conutils.h>
21 
22 #include "resource.h"
23 
24 /* Command-line argument switches */
27 
28 //----------------------------------------------------------------------
29 //
30 // Writes the last error as both text and error code to the console.
31 //
32 //----------------------------------------------------------------------
34 {
36  NULL, dwError, LANG_USER_DEFAULT);
37  ConPrintf(StdErr, L"Error code: %lu\n", dwError);
38 }
39 
40 //----------------------------------------------------------------------
41 //
42 // Sets flags based on command-line arguments
43 //
44 //----------------------------------------------------------------------
46 {
47  int i;
48 
49  // FIXME: Add handling of command-line arguments to select
50  // the session number and name, and also name of remote machine.
51  // Example: logoff.exe 4 /SERVER:Master
52  // should logoff session number 4 on remote machine called Master.
53 
54  for (i = 1; i < argc; i++)
55  {
56  switch (argv[i][0])
57  {
58  case L'-':
59  case L'/':
60  // -v (verbose)
61  if (argv[i][1] == L'v')
62  {
63  bVerbose = TRUE;
64  break;
65  }
66  // -? (usage)
67  else if (argv[i][1] == L'?')
68  {
69  /* Will display the Usage */
70  return FALSE;
71  }
72  /* Fall through */
73  default:
74  /* Invalid parameter detected */
76  return FALSE;
77  }
78  }
79 
80  return TRUE;
81 }
82 
83 //----------------------------------------------------------------------
84 //
85 // Main entry for program
86 //
87 //----------------------------------------------------------------------
88 int wmain(int argc, WCHAR *argv[])
89 {
90  /* Initialize the Console Standard Streams */
92 
93  /* Parse command line */
94  if (!ParseCommandLine(argc, argv))
95  {
97  return 1;
98  }
99 
100  /* Should we log off session on remote server? */
101  if (szRemoteServerName)
102  {
103  if (bVerbose)
105 
106  // FIXME: Add Remote Procedure Call to logoff user on a remote machine
107  ConPuts(StdErr, L"Remote Procedure Call in logoff.exe has not been implemented");
108  }
109  /* Perform logoff of current session on local machine instead */
110  else
111  {
112  if (bVerbose)
113  {
114  /* Get resource string and print it */
116  }
117 
118  /* Actual logoff */
119  if (!ExitWindowsEx(EWX_LOGOFF, 0))
120  {
122  return 1;
123  }
124  }
125 
126  return 0;
127 }
128 
129 /* EOF */
static int argc
Definition: ServiceArgs.c:12
#define TRUE
Definition: types.h:120
int wmain(int argc, WCHAR *argv[])
Definition: logoff.c:88
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define IDS_USAGE
Definition: resource.h:3
#define argv
Definition: mplay32.c:18
#define EWX_LOGOFF
Definition: winuser.h:631
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define ConInitStdStreams()
Definition: stream.h:122
unsigned int BOOL
Definition: ntddk_ex.h:94
INT __cdecl ConPrintf(IN PCON_STREAM Stream, IN LPWSTR szStr,...)
Definition: outstream.c:520
smooth NULL
Definition: ftsmooth.c:416
LPWSTR szRemoteServerName
Definition: logoff.c:25
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:404
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL ParseCommandLine(int argc, WCHAR *argv[])
Definition: logoff.c:45
unsigned long DWORD
Definition: ntddk_ex.h:95
INT ConMsgPuts(IN PCON_STREAM Stream, IN DWORD dwFlags, IN LPCVOID lpSource OPTIONAL, IN DWORD dwMessageId, IN DWORD dwLanguageId)
Definition: outstream.c:837
BOOL bVerbose
Definition: logoff.c:26
#define StdErr
Definition: stream.h:77
INT ConResPuts(IN PCON_STREAM Stream, IN UINT uID)
Definition: outstream.c:610
static const WCHAR L[]
Definition: oid.c:1250
BOOL WINAPI ExitWindowsEx(_In_ UINT, _In_ DWORD)
VOID DisplayError(DWORD dwError)
Definition: logoff.c:33
INT ConPuts(IN PCON_STREAM Stream, IN LPWSTR szStr)
Definition: outstream.c:427
#define StdOut
Definition: stream.h:76
#define IDS_ILLEGAL_PARAM
Definition: resource.h:6
#define IDS_LOGOFF_LOCAL
Definition: resource.h:5
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDS_LOGOFF_REMOTE
Definition: resource.h:4
#define LANG_USER_DEFAULT
Definition: tnerror.cpp:50