/*++ 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 #include #include // NT definitions #include // NT runtime library definitions #include #include // Win32 type definitions #include // Win32 base API prototypes #include // ALERT_ equates. #include // LAN Manager common definitions #include // LAN Manager alert structures and APIs #include // LAN Manager network error definitions #include // FORMAT_ equates. #include // Transitional string functions #include #include //#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 ); }