129 lines
2.9 KiB
C++
129 lines
2.9 KiB
C++
/*++
|
|
|
|
Copyright (c) 1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
service.h
|
|
|
|
Abstract:
|
|
|
|
SIS Groveler service headers
|
|
|
|
Authors:
|
|
|
|
John Douceur, 1998
|
|
|
|
Environment:
|
|
|
|
User Mode
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _INC_SERVICE
|
|
|
|
#define _INC_SERVICE
|
|
|
|
#if SERVICE
|
|
|
|
class Service
|
|
{
|
|
public:
|
|
|
|
static int start();
|
|
|
|
static void record_partition_indices();
|
|
|
|
static void set_max_response_time(
|
|
unsigned int max_response_time);
|
|
|
|
static void checkpoint();
|
|
|
|
static void report_start();
|
|
|
|
static bool groveling_paused();
|
|
|
|
static bool foreground_groveling();
|
|
|
|
static void suspending_controller();
|
|
|
|
static void suspending_exhorter();
|
|
|
|
static bool partition_in_foreground(
|
|
int partition_index);
|
|
|
|
static void set_foreground_batch_in_progress(
|
|
int partition_index,
|
|
bool value);
|
|
|
|
static void follow_command();
|
|
|
|
private:
|
|
|
|
static void WINAPI control_handler(
|
|
DWORD opcode);
|
|
|
|
static void WINAPI service_main(
|
|
DWORD argc,
|
|
LPTSTR *argv);
|
|
|
|
Service() {}
|
|
~Service() {}
|
|
|
|
enum {num_drive_letters = 26};
|
|
|
|
static SERVICE_STATUS status;
|
|
static SERVICE_STATUS_HANDLE status_handle;
|
|
static int num_partitions;
|
|
static int partition_indices[num_drive_letters];
|
|
static unsigned int max_response_time;
|
|
|
|
static volatile bool pause_commanded;
|
|
static volatile bool grovel_paused;
|
|
|
|
static volatile bool *full_volume_scan_commanded;
|
|
|
|
static volatile bool *demarcate_foreground_batch;
|
|
static volatile bool *foreground_batch_in_progress;
|
|
static volatile bool *foreground_commanded;
|
|
static volatile bool *foreground_acknowledged;
|
|
static volatile int foreground_count;
|
|
|
|
static volatile bool controller_suspended;
|
|
static volatile bool exhorter_suspended;
|
|
};
|
|
|
|
#define SERVICE_RECORD_PARTITION_INDICES() Service::record_partition_indices();
|
|
#define SERVICE_SET_MAX_RESPONSE_TIME(time) Service::set_max_response_time(time);
|
|
#define SERVICE_CHECKPOINT() Service::checkpoint();
|
|
#define SERVICE_REPORT_START() Service::report_start();
|
|
#define SERVICE_GROVELING_PAUSED() Service::groveling_paused()
|
|
#define SERVICE_FOREGROUND_GROVELING() Service::foreground_groveling()
|
|
#define SERVICE_SUSPENDING_CONTROLLER() Service::suspending_controller()
|
|
#define SERVICE_SUSPENDING_EXHORTER() Service::suspending_exhorter()
|
|
#define SERVICE_PARTITION_IN_FOREGROUND(part_index) Service::partition_in_foreground(part_index)
|
|
#define SERVICE_SET_FOREGROUND_BATCH_IN_PROGRESS(part_index, value) Service::set_foreground_batch_in_progress(part_index, value)
|
|
#define SERVICE_FOLLOW_COMMAND() Service::follow_command()
|
|
|
|
#else // SERVICE
|
|
|
|
#define SERVICE_RECORD_PARTITION_INDICES()
|
|
#define SERVICE_SET_MAX_RESPONSE_TIME(time)
|
|
#define SERVICE_CHECKPOINT()
|
|
#define SERVICE_REPORT_START()
|
|
#define SERVICE_GROVELING_PAUSED() false
|
|
#define SERVICE_FOREGROUND_GROVELING() false
|
|
#define SERVICE_SUSPENDING_CONTROLLER()
|
|
#define SERVICE_SUSPENDING_EXHORTER()
|
|
#define SERVICE_PARTITION_IN_FOREGROUND(part_index) false
|
|
#define SERVICE_SET_FOREGROUND_BATCH_IN_PROGRESS(part_index, value)
|
|
#define SERVICE_FOLLOW_COMMAND()
|
|
|
|
#endif // SERVICE
|
|
|
|
#endif /* _INC_SERVICE */
|