|
|
/*++
Copyright (c) 1991-92 Microsoft Corporation
Module Name:
altest.c
Abstract:
Test program for the Alerter service.
Author:
Rita Wong (ritaw) 17-July-1991
Revision History:
--*/
#include <stdio.h>
#include <string.h>
#include <nt.h> // NT definitions
#include <ntrtl.h> // NT runtime library definitions
#include <nturtl.h>
#include <windef.h> // Win32 type definitions
#include <winbase.h> // Win32 base API prototypes
#include <alertmsg.h> // ALERT_ equates.
#include <lmcons.h> // LAN Manager common definitions
#include <lmalert.h> // LAN Manager alert structures and APIs
#include <lmerr.h> // LAN Manager network error definitions
#include <netdebug.h> // FORMAT_ equates.
#include <tstring.h> // Transitional string functions
#include <conio.h>
#include <time.h>
//#include "lmspool.h"
//
// Global buffer
//
TCHAR VariableInfo[1024];
//------------------------------------------------------------------------//
VOID __cdecl main( int argc, char *argv[] ) { NET_API_STATUS ApiStatus; PADMIN_OTHER_INFO Admin; PUSER_OTHER_INFO User; PPRINT_OTHER_INFO Print; LPWSTR pString; DWORD dwTime;
DWORD VariableInfoSize; DWORD TmpSize; // Size of var portion plus 1 mergestring
CHAR response; DWORD i;
UNREFERENCED_PARAMETER(argc); UNREFERENCED_PARAMETER(argv);
(VOID) printf( "AlTest: starting up...\n" ); //
// Alerter service should not crash if username and computer name are
// not part of the mailslot message
//
User = (PUSER_OTHER_INFO) VariableInfo; User->alrtus_errcode = ALERT_CloseBehindError; User->alrtus_numstrings = 1;
VariableInfoSize = sizeof(USER_OTHER_INFO);
//
// Write the mergestring into buffer. In the case of a close behind error
// it is the name of the file which failed to close.
//
#define FILENAME TEXT("PLUTO.TXT")
STRCPY((LPTSTR) ((DWORD) User + VariableInfoSize), FILENAME); VariableInfoSize += ((STRLEN(FILENAME) + 1) * sizeof(TCHAR));
TmpSize = VariableInfoSize;
//
// This should not cause a message to be sent because neither the user
// nor computer name is specified.
//
ApiStatus = NetAlertRaise( ALERT_USER_EVENT, // alert event name
VariableInfo, VariableInfoSize );
(VOID) printf( "AlTest 1(USER_ALERT): done NetAlertRaise, status=" FORMAT_API_STATUS ", expect=" FORMAT_API_STATUS ".\n", ApiStatus, ERROR_INVALID_PARAMETER );
for (i = 1; i < 3; i ++) {
VariableInfoSize = TmpSize;
//
// Now include username and computer name
//
#define USERNAME TEXT("DANL")
#define COMPUTERNAME TEXT("danl1")
STRCPY((LPTSTR) ((DWORD) User + VariableInfoSize), USERNAME); VariableInfoSize += ((STRLEN(USERNAME) + 1) * sizeof(TCHAR));
//
// Put a sequence number at the end of the username
//
//VariableInfo[STRLEN(USERNAME) - 1] = i + '1';
STRCPY((LPTSTR) ((DWORD) User + VariableInfoSize), COMPUTERNAME); VariableInfoSize += ((STRLEN(COMPUTERNAME) + 1) * sizeof(TCHAR));
//
// User alert should be raised successfully.
//
ApiStatus = NetAlertRaiseEx( ALERT_USER_EVENT, VariableInfo, VariableInfoSize, TEXT("SERVER") ); // service name
(VOID) printf( "AlTest 2(USER_ALERT): done NetAlertRaiseEx, status=" FORMAT_API_STATUS ".\n", ApiStatus );
}
//--------------------------
// Raise an admin alert
// (audit log full)
//--------------------------
Admin = (PADMIN_OTHER_INFO) VariableInfo; Admin->alrtad_errcode = ALERT_AuditLogFull; Admin->alrtad_numstrings = 0;
ApiStatus = NetAlertRaiseEx( ALERT_ADMIN_EVENT, VariableInfo, sizeof(ADMIN_OTHER_INFO), TEXT("SERVER") ); // service name
(VOID) printf( "AlTest 3(ADMIN_ALERT): done NetAlertRaiseEx(admin), status=" FORMAT_API_STATUS ".\n", ApiStatus );
//--------------------------
// Raise an admin alert
// (user-defined text)
//--------------------------
Admin = (PADMIN_OTHER_INFO) VariableInfo; Admin->alrtad_errcode = MAXULONG; Admin->alrtad_numstrings = 1; pString = (LPWSTR)((LPBYTE)VariableInfo+sizeof(ADMIN_OTHER_INFO)); wcscpy(pString,L"This is a User-Defined Message");
ApiStatus = NetAlertRaiseEx( ALERT_ADMIN_EVENT, VariableInfo, sizeof(ADMIN_OTHER_INFO)+WCSSIZE(pString), TEXT("SERVER") ); // service name
(VOID) printf( "AlTest 3.5(ADMIN_ALERT): done NetAlertRaiseEx(admin), status=" FORMAT_API_STATUS ".\n", ApiStatus );
//---------------------------------
// Raise an alert (NON-EX version)
// (user-defined text)
//---------------------------------
{ LPSTD_ALERT pStdAlert = (LPSTD_ALERT)VariableInfo;
pStdAlert->alrt_timestamp = 1; wcscpy(pStdAlert->alrt_eventname,ALERT_ADMIN_EVENT); wcscpy(pStdAlert->alrt_servicename, L"Dan'sSvc"); Admin = (LPADMIN_OTHER_INFO)((LPBYTE)VariableInfo + sizeof(STD_ALERT)); pString = (LPWSTR)((LPBYTE)VariableInfo + sizeof(STD_ALERT) + sizeof(ADMIN_OTHER_INFO)); Admin->alrtad_errcode = MAXULONG; Admin->alrtad_numstrings = 1; wcscpy(pString, L"Some User Data"); VariableInfoSize = sizeof(STD_ALERT)+ sizeof(ADMIN_OTHER_INFO) + STRSIZE(pString);
ApiStatus = NetAlertRaise( ALERT_ADMIN_EVENT, // alert event name
VariableInfo, VariableInfoSize );
(VOID) printf( "AlTest 3.6(ADMIN_ALERT): done NetAlertRaise(admin), status=" FORMAT_API_STATUS ".\n", ApiStatus );
} //---------------------------------
// PRINT ALERT: PRINTER OFFLINE
// (queued for printing)
//---------------------------------
time((time_t *)&dwTime); printf("time=%d\n",dwTime); Print = (PPRINT_OTHER_INFO) VariableInfo; Print->alrtpr_jobid = 626; Print->alrtpr_status = PRJOB_DESTOFFLINE; Print->alrtpr_submitted = dwTime; Print->alrtpr_size = 72496;
//
// All print Alerts have the PRINT_OTHER_INFO structure
// followed by these same strings in this order...
//
VariableInfoSize = sizeof(PRINT_OTHER_INFO);
// Computername
STRCPY((LPTSTR) ((DWORD) Print + VariableInfoSize), TEXT("DANL2-SHAUNAB")); VariableInfoSize += ((STRLEN(TEXT("DANL2-SHAUNAB")) + 1) * sizeof(TCHAR));
// username
STRCPY((LPTSTR) ((DWORD) Print + VariableInfoSize), TEXT("DANL1")); VariableInfoSize += ((STRLEN(TEXT("DANL1")) + 1) * sizeof(TCHAR));
// queuename
STRCPY((LPTSTR) ((DWORD) Print + VariableInfoSize), TEXT("8/1154 CORPA 14DBDE")); VariableInfoSize += ((STRLEN(TEXT("8/1154 CORPA 14DBDE")) + 1) * sizeof(TCHAR));
// destination
STRCPY((LPTSTR) ((DWORD) Print + VariableInfoSize), TEXT("8/1154 CORPA 14DBDE(CORPA)")); VariableInfoSize += ((STRLEN(TEXT("8/1154 CORPA 14DBDE(CORPA)")) + 1) * sizeof(TCHAR));
// status string
STRCPY((LPTSTR) ((DWORD) Print + VariableInfoSize), TEXT("ERROR")); VariableInfoSize += ((STRLEN(TEXT("ERROR")) + 1) * sizeof(TCHAR));
#ifdef REMOVE
ApiStatus = NetAlertRaiseEx( ALERT_PRINT_EVENT, VariableInfo, VariableInfoSize, TEXT("SPOOLER") ); // service name
(VOID) printf( "AlTest 4(PRINT_ALERT): done NetAlertRaiseEx(print), status=" FORMAT_API_STATUS ".\n", ApiStatus );
//
// Wait for user reponse before continuing.
//
printf("continue?....\n"); response = _getch(); if ((response == 'n') || (response == 'N')) { return; } #endif //REMOVE
//---------------------------------------
// PRINT ALERT: JOB_COMPLETE
//---------------------------------------
Print->alrtpr_status = PRJOB_COMPLETE | PRJOB_QS_PRINTING; Print->alrtpr_jobid = 2434;
ApiStatus = NetAlertRaiseEx( ALERT_PRINT_EVENT, VariableInfo, VariableInfoSize, TEXT("SPOOLER") ); // service name
(VOID) printf( "AlTest 4.5(PRINT_ALERT): done NetAlertRaiseEx(print), status=" FORMAT_API_STATUS ".\n", ApiStatus );
//---------------------------------------
// PRINT ALERT: NO PAPER - JOB_QUEUED
//---------------------------------------
Print->alrtpr_status = PRJOB_DESTNOPAPER; Print->alrtpr_jobid = 628;
ApiStatus = NetAlertRaiseEx( ALERT_PRINT_EVENT, VariableInfo, VariableInfoSize, TEXT("SPOOLER") ); // service name
(VOID) printf( "AlTest 5(PRINT_ALERT): done NetAlertRaiseEx(print), status=" FORMAT_API_STATUS ".\n", ApiStatus );
//------------------------------------------
// PRINT ALERT: NO PAPER - JOB PRINTING
//------------------------------------------
Print->alrtpr_status = PRJOB_DESTNOPAPER | PRJOB_QS_PRINTING; Print->alrtpr_jobid = 629;
ApiStatus = NetAlertRaiseEx( ALERT_PRINT_EVENT, VariableInfo, VariableInfoSize, TEXT("SPOOLER") ); // service name
(VOID) printf( "AlTest 5(PRINT_ALERT): done NetAlertRaiseEx(print), status=" FORMAT_API_STATUS ".\n", ApiStatus );
}
|