Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

518 lines
15 KiB

/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
diskperf.c
Abstract:
Program to display and/or update the current value of the Diskperf
driver startup value
Author:
Bob Watson (a-robw) 4 Dec 92
Revision History:
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <ntconfig.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include "diskperf.h" // include text string id constancts
#define SWITCH_CHAR '-' // is there a system call to get this?
#define ENABLE_CHAR 'Y' // command will be upcased
#define DISABLE_CHAR 'N'
#define ENHANCED_CHAR 'E'
#define LOCAL_CHANGE 2 // number of commands in a local change command
#define REMOTE_CHANGE 3 // number of commands in a remote change command
//
// note these values are arbitrarily based on the whims of the people
// developing the disk drive drivers that belong to the "Filter" group.
//
#define TAG_NORMAL 4 // diskperf starts AFTER ftdisk
#define TAG_ENHANCED 2 // diskperf starts BEFORE ftdisk
const LPTSTR lpwszDiskPerfKey = TEXT("SYSTEM\\CurrentControlSet\\Services\\Diskperf");
#define REG_TO_DP_INDEX(reg_idx) (DP_LOAD_STATUS_BASE + (\
(reg_idx == SERVICE_BOOT_START) ? DP_BOOT_START : \
(reg_idx == SERVICE_SYSTEM_START) ? DP_SYSTEM_START : \
(reg_idx == SERVICE_AUTO_START) ? DP_AUTO_START : \
(reg_idx == SERVICE_DEMAND_START) ? DP_DEMAND_START : \
(reg_idx == SERVICE_DISABLED) ? DP_NEVER_START : DP_UNDEFINED))
#define MAX_MACHINE_NAME_LEN 32
// command line arguments
#define CMD_SHOW_LOCAL_STATUS 1
#define CMD_DO_COMMAND 2
#define ArgIsSystem(arg) (*(arg) == '\\' ? TRUE : FALSE)
//
// global buffer for help text display strings
//
#define DISP_BUFF_LEN 256
#define NUM_STRING_BUFFS 2
LPCTSTR BlankString = TEXT(" ");
LPCTSTR StartKey = TEXT("Start");
LPCTSTR TagKey = TEXT("Tag");
LPCTSTR EmptyString = TEXT("");
HINSTANCE hMod = NULL;
DWORD dwLastError;
LPCTSTR
GetStringResource (
UINT wStringId
)
{
static TCHAR DisplayStringBuffer[NUM_STRING_BUFFS][DISP_BUFF_LEN];
static DWORD dwBuffIndex;
LPTSTR szReturnBuffer;
dwBuffIndex++;
dwBuffIndex %= NUM_STRING_BUFFS;
szReturnBuffer = (LPTSTR)&DisplayStringBuffer[dwBuffIndex][0];
if (!hMod) {
hMod = (HINSTANCE)GetModuleHandle(NULL); // get instance ID of this module;
}
if (hMod) {
if ((LoadString(hMod, wStringId, szReturnBuffer, DISP_BUFF_LEN)) > 0) {
return (LPCTSTR)szReturnBuffer;
} else {
dwLastError = GetLastError();
return EmptyString;
}
} else {
return EmptyString;
}
}
LPCTSTR
GetFormatResource (
UINT wStringId
)
{
static TCHAR TextFormat[DISP_BUFF_LEN];
if (!hMod) {
hMod = (HINSTANCE)GetModuleHandle(NULL); // get instance ID of this module;
}
if (hMod) {
if ((LoadString(hMod, wStringId, TextFormat, DISP_BUFF_LEN)) > 0) {
return (LPCTSTR)&TextFormat[0];
} else {
dwLastError = GetLastError();
return BlankString;
}
} else {
return BlankString;
}
}
VOID
DisplayChangeCmd (
)
{
UINT wID;
TCHAR OemDisplayStringBuffer[DISP_BUFF_LEN * 2];
TCHAR DisplayStringBuffer[DISP_BUFF_LEN];
if (hMod) {
if ((LoadString(hMod, DP_TEXT_FORMAT, DisplayStringBuffer, DISP_BUFF_LEN)) > 0) {
for (wID=DP_CMD_HELP_START; wID <= DP_CMD_HELP_END; wID++) {
if ((LoadString(hMod, wID, DisplayStringBuffer, DISP_BUFF_LEN)) > 0) {
CharToOem (DisplayStringBuffer, OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
}
}
}
}
VOID
DisplayCmdHelp(
)
{
UINT wID;
TCHAR OemDisplayStringBuffer[DISP_BUFF_LEN * 2];
TCHAR DisplayStringBuffer[DISP_BUFF_LEN];
if (hMod) {
if ((LoadString(hMod, DP_TEXT_FORMAT, DisplayStringBuffer, DISP_BUFF_LEN)) > 0) {
for (wID=DP_HELP_TEXT_START; wID <= DP_HELP_TEXT_END; wID++) {
if ((LoadString(hMod, wID, DisplayStringBuffer, DISP_BUFF_LEN)) > 0) {
CharToOem (DisplayStringBuffer, OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
}
}
}
DisplayChangeCmd();
}
NTSTATUS
DisplayStatus (
LPSTR lpszMachine
)
{
NTSTATUS Status;
HKEY hRegistry;
HKEY hDiskPerfKey;
DWORD dwValue, dwValueSize, dwTag;
TCHAR OemDisplayStringBuffer[DISP_BUFF_LEN * 2];
TCHAR cMachineName[MAX_MACHINE_NAME_LEN];
PTCHAR pThisWideChar;
PCHAR pThisChar;
INT iCharCount;
pThisChar = lpszMachine;
pThisWideChar = cMachineName;
iCharCount = 0;
if (pThisChar) { // if machine is not NULL, then copy
while (*pThisChar) {
*pThisWideChar++ = (TCHAR)(*pThisChar++);
if (++iCharCount >= MAX_MACHINE_NAME_LEN) break;
}
*pThisWideChar = 0;
}
Status = RegConnectRegistry(
lpszMachine,
HKEY_LOCAL_MACHINE,
&hRegistry);
if (Status == ERROR_SUCCESS) {
// connected to registry on machine
Status = RegOpenKeyEx (
hRegistry,
lpwszDiskPerfKey,
(DWORD)0,
KEY_QUERY_VALUE,
&hDiskPerfKey);
if (Status == ERROR_SUCCESS) {
dwValueSize = sizeof(dwValue);
Status = RegQueryValueEx (
hDiskPerfKey,
StartKey,
NULL,
NULL,
(LPBYTE)&dwValue,
&dwValueSize);
dwValueSize = sizeof(dwTag);
Status = RegQueryValueEx (
hDiskPerfKey,
TagKey,
NULL,
NULL,
(LPBYTE)&dwTag,
&dwValueSize);
if (!lpszMachine) {
lstrcpy(cMachineName,
GetStringResource(DP_THIS_SYSTEM));
}
if (Status == ERROR_SUCCESS) {
sprintf (OemDisplayStringBuffer,
GetFormatResource (DP_CURRENT_FORMAT),
(dwTag == TAG_ENHANCED ?
GetStringResource(DP_ENHANCED) : EmptyString),
cMachineName,
GetStringResource(REG_TO_DP_INDEX(dwValue)));
CharToOem (OemDisplayStringBuffer, OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
if (dwTag == TAG_ENHANCED) {
CharToOem (GetStringResource (DP_DISCLAIMER),
OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
} else {
CharToOem (GetFormatResource (DP_UNABLE_READ_START),
OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
RegCloseKey (hDiskPerfKey);
} else {
CharToOem (GetFormatResource (DP_UNABLE_READ_REGISTRY),
OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
} else {
if (lpszMachine != NULL) {
lstrcpy (cMachineName,
GetStringResource(DP_THIS_SYSTEM));
}
sprintf (OemDisplayStringBuffer,
GetFormatResource(DP_UNABLE_CONNECT), cMachineName);
CharToOem (OemDisplayStringBuffer, OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
if (Status != ERROR_SUCCESS) {
sprintf (OemDisplayStringBuffer,
GetFormatResource (DP_STATUS_FORMAT), Status);
CharToOem (OemDisplayStringBuffer, OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
return Status;
}
NTSTATUS
DoChangeCommand (
LPSTR lpszCommand,
LPSTR lpszMachine
)
{
// connect to registry on local machine with read/write access
NTSTATUS Status;
HKEY hRegistry;
HKEY hDiskPerfKey;
DWORD dwValue, dwValueSize, dwOrigValue, dwTag, dwOrigTag;
TCHAR cMachineName[MAX_MACHINE_NAME_LEN];
PTCHAR pThisWideChar;
PCHAR pThisChar;
INT iCharCount;
PCHAR pCmdChar;
TCHAR OemDisplayStringBuffer[DISP_BUFF_LEN * 2];
// check command to see if it's valid
_strupr (lpszCommand);
pCmdChar = lpszCommand;
dwValue = 0;
if (*pCmdChar++ == SWITCH_CHAR ) {
if (*pCmdChar == ENABLE_CHAR) {
if (*(pCmdChar+1) == ENHANCED_CHAR) {
dwValue = SERVICE_BOOT_START;
dwTag = TAG_ENHANCED;
} else {
dwValue = SERVICE_BOOT_START;
dwTag = TAG_NORMAL;
}
} else if (*pCmdChar == DISABLE_CHAR) {
dwValue = SERVICE_DISABLED;
dwTag = TAG_NORMAL;
} else {
DisplayCmdHelp();
return ERROR_SUCCESS;
}
} else {
DisplayChangeCmd();
return ERROR_SUCCESS;
}
// if command OK then convert machine to wide string for connection
pThisChar = lpszMachine;
pThisWideChar = cMachineName;
iCharCount = 0;
if (pThisChar) {
while (*pThisChar) {
*pThisWideChar++ = (TCHAR)(*pThisChar++);
if (++iCharCount >= MAX_MACHINE_NAME_LEN) break;
}
*pThisWideChar = 0; // null terminate
}
// connect to registry
Status = RegConnectRegistry(
lpszMachine,
HKEY_LOCAL_MACHINE,
&hRegistry);
if (Status == ERROR_SUCCESS) {
// connected to registry on machine
// open key to modify
Status = RegOpenKeyEx (
hRegistry,
lpwszDiskPerfKey,
(DWORD)0,
KEY_WRITE | KEY_READ,
&hDiskPerfKey);
if (Status == ERROR_SUCCESS) {
dwValueSize = sizeof(dwValue);
Status = RegQueryValueEx (
hDiskPerfKey,
StartKey,
NULL,
NULL,
(LPBYTE)&dwOrigValue,
&dwValueSize);
dwValueSize = sizeof(dwOrigTag);
Status = RegQueryValueEx (
hDiskPerfKey,
TagKey,
NULL,
NULL,
(LPBYTE)&dwOrigTag,
&dwValueSize);
if (!lpszMachine) {
lstrcpy (cMachineName,
GetStringResource(DP_THIS_SYSTEM));
}
if ((Status == ERROR_SUCCESS) &&
((dwValue != dwOrigValue) || (dwTag != dwOrigTag))) {
Status = RegSetValueEx (
hDiskPerfKey,
StartKey,
0L,
REG_DWORD,
(LPBYTE)&dwValue,
sizeof(dwValue));
if (Status == ERROR_SUCCESS) {
Status = RegSetValueEx (
hDiskPerfKey,
TagKey,
0L,
REG_DWORD,
(LPBYTE)&dwTag,
sizeof(dwTag));
}
if (Status != ERROR_SUCCESS) {
CharToOem (GetFormatResource(DP_UNABLE_MODIFY_VALUE),
OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
} else {
sprintf (OemDisplayStringBuffer,
GetFormatResource(DP_NEW_DISKPERF_STATUS),
(dwTag == TAG_ENHANCED ?
GetStringResource(DP_ENHANCED) : EmptyString),
cMachineName,
GetStringResource(REG_TO_DP_INDEX(dwValue)));
CharToOem (OemDisplayStringBuffer, OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
if (dwTag == TAG_ENHANCED) {
CharToOem (GetStringResource (DP_DISCLAIMER),
OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
CharToOem (GetFormatResource(DP_REBOOTED), OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
} else if (Status != ERROR_SUCCESS) {
CharToOem (GetFormatResource(DP_UNABLE_READ_REGISTRY),
OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
} else {
sprintf (OemDisplayStringBuffer,
GetFormatResource(DP_CURRENT_FORMAT),
(dwTag == TAG_ENHANCED ?
GetStringResource(DP_ENHANCED) : EmptyString),
cMachineName,
GetStringResource(REG_TO_DP_INDEX(dwValue)));
CharToOem (OemDisplayStringBuffer, OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
if (dwTag == TAG_ENHANCED) {
CharToOem (GetStringResource (DP_DISCLAIMER),
OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
}
RegCloseKey (hDiskPerfKey);
} else {
CharToOem (GetFormatResource(DP_UNABLE_READ_REGISTRY),
OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
} else {
if (lpszMachine != NULL) {
lstrcpy (cMachineName,
GetStringResource(DP_THIS_SYSTEM));
}
sprintf (OemDisplayStringBuffer,
GetFormatResource(DP_UNABLE_CONNECT), cMachineName);
CharToOem (OemDisplayStringBuffer, OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
if (Status != ERROR_SUCCESS) {
sprintf (OemDisplayStringBuffer, GetFormatResource(DP_STATUS_FORMAT), Status);
CharToOem (OemDisplayStringBuffer, OemDisplayStringBuffer);
printf (OemDisplayStringBuffer);
}
return Status;
}
int
_CRTAPI1 main(
int argc,
char *argv[]
)
{
NTSTATUS Status = ERROR_SUCCESS;
hMod = (HINSTANCE)GetModuleHandle(NULL); // get instance ID of this module;
// check for command arguments
if (argc == CMD_SHOW_LOCAL_STATUS) {
Status = DisplayStatus(NULL);
if (Status == ERROR_SUCCESS) {
DisplayChangeCmd();
}
} else if (argc >= CMD_DO_COMMAND) {
if (ArgIsSystem(argv[1])) {
Status = DisplayStatus (argv[1]);
if (Status != ERROR_SUCCESS) {
DisplayChangeCmd();
}
} else { // do change command
if (argc == LOCAL_CHANGE) {
DoChangeCommand (argv[1], NULL);
} else if (argc == REMOTE_CHANGE) {
DoChangeCommand(argv[1], argv[2]);
} else {
DisplayChangeCmd();
}
}
} else {
DisplayCmdHelp();
}
printf ("\n");
return 0;
}