mirror of https://github.com/tongzx/nt5src
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.
556 lines
9.5 KiB
556 lines
9.5 KiB
/*++
|
|
|
|
Copyright (c) 1990 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
sfmutil.c
|
|
|
|
Author:
|
|
|
|
Krishg
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#if DBG==1 && DEVL==1
|
|
#define DEBUG
|
|
#endif
|
|
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include <windows.h>
|
|
#include <winspool.h>
|
|
#include <ntsam.h>
|
|
#include <ntlsa.h>
|
|
#include <stdlib.h>
|
|
#include "sfmutil.h"
|
|
|
|
#ifdef DBCS
|
|
#include "locale.h"
|
|
#endif // DBCS
|
|
HANDLE ThisDLLHandle;
|
|
|
|
CHAR ReturnTextBuffer[512];
|
|
|
|
|
|
BOOL
|
|
UtilDLLInit(
|
|
IN HANDLE DLLHandle,
|
|
IN DWORD Reason,
|
|
IN LPVOID ReservedAndUnused
|
|
)
|
|
{
|
|
ReservedAndUnused;
|
|
|
|
switch(Reason) {
|
|
|
|
case DLL_PROCESS_ATTACH:
|
|
|
|
ThisDLLHandle = DLLHandle;
|
|
#ifdef DBCS // UtilDLLInit()
|
|
// we want to have the Unicode <-> Ansi conversion based on System locale.
|
|
setlocale(LC_ALL,"");
|
|
#endif // DBCS
|
|
break;
|
|
|
|
case DLL_PROCESS_DETACH:
|
|
|
|
case DLL_THREAD_ATTACH:
|
|
case DLL_THREAD_DETACH:
|
|
|
|
break;
|
|
}
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
/* Delete the file. If Unable to delete the file return failed */
|
|
|
|
BOOL
|
|
DelFile (
|
|
DWORD cArgs,
|
|
LPTSTR Args[],
|
|
LPTSTR *TextOut
|
|
)
|
|
{
|
|
BOOL Status = FALSE;
|
|
LPTSTR pSrcFile = NULL;
|
|
INT cbAscii;
|
|
|
|
*TextOut = (LPTSTR)ReturnTextBuffer;
|
|
|
|
do
|
|
{
|
|
if(cArgs!=1)
|
|
break;
|
|
|
|
cbAscii = strlen((LPSTR)Args[0]) +1;
|
|
|
|
pSrcFile = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
|
|
if(pSrcFile == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(pSrcFile, (LPSTR)Args[0],cbAscii) == -1)
|
|
break;
|
|
|
|
Status = DeleteFile(pSrcFile);
|
|
|
|
} while (FALSE);
|
|
|
|
if(pSrcFile != NULL)
|
|
LocalFree(pSrcFile);
|
|
|
|
strcpy(ReturnTextBuffer, Status ? (LPSTR)"SUCCESS" : (LPSTR)"FAILED");
|
|
return Status;
|
|
}
|
|
|
|
/*
|
|
* Copy Uam Files :
|
|
* Copies the UAM Files to the NTFS Volume
|
|
*/
|
|
|
|
BOOL
|
|
CopyUamFiles (
|
|
DWORD cArgs,
|
|
LPTSTR Args[],
|
|
LPTSTR *TextOut
|
|
)
|
|
{
|
|
BOOL Status = FALSE;
|
|
INT cbAscii;
|
|
|
|
LPTSTR pSrcFile = NULL;
|
|
LPTSTR pDestFile = NULL;
|
|
|
|
*TextOut = (LPTSTR)ReturnTextBuffer;
|
|
|
|
do
|
|
{
|
|
if(cArgs!=2)
|
|
break;
|
|
|
|
cbAscii = strlen((LPSTR)Args[0]) +1;
|
|
|
|
pSrcFile = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
|
|
if(pSrcFile == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(pSrcFile, (LPSTR)Args[0],cbAscii) == -1)
|
|
break;
|
|
|
|
cbAscii = strlen((LPSTR)Args[1]) +1;
|
|
|
|
pDestFile = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
|
|
if(pDestFile == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(pDestFile, (LPSTR)Args[1],cbAscii) == -1)
|
|
break;
|
|
|
|
#ifdef DEBUG
|
|
DbgPrint("Source File %ws\n",pSrcFile);
|
|
DbgPrint("Destination File %ws\n",pDestFile);
|
|
#endif
|
|
|
|
Status = CopyFile(pSrcFile,pDestFile,FALSE);
|
|
|
|
} while (FALSE);
|
|
|
|
if(pSrcFile != NULL)
|
|
LocalFree(pSrcFile);
|
|
|
|
if(pDestFile != NULL)
|
|
LocalFree(pDestFile);
|
|
|
|
strcpy(ReturnTextBuffer, Status ? (LPSTR)"SUCCESS" : (LPSTR)"FAILED");
|
|
|
|
return Status;
|
|
|
|
}
|
|
|
|
#define AFPMGRKEY TEXT("Afp Manager")
|
|
|
|
BOOL
|
|
WriteAfpMgrIniStrings (
|
|
DWORD cArgs,
|
|
LPTSTR Args[],
|
|
LPTSTR *TextOut
|
|
)
|
|
|
|
{
|
|
|
|
BOOL Status = FALSE;
|
|
BOOL KeyDelete = FALSE;
|
|
INT cbAscii;
|
|
LPTSTR pSectionName = NULL;
|
|
LPTSTR pString = NULL;
|
|
LPTSTR pIniFile = NULL;
|
|
|
|
*TextOut = (LPTSTR)ReturnTextBuffer;
|
|
|
|
do
|
|
{
|
|
if(cArgs != 3)
|
|
break;
|
|
|
|
cbAscii = strlen((LPSTR)Args[0]) +1;
|
|
|
|
pSectionName = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
|
|
if(pSectionName == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(pSectionName, (LPSTR)Args[0],cbAscii) == -1)
|
|
break;
|
|
//
|
|
// If the String is NULL, set String to NULL, otherwise
|
|
// convert the string to unicode
|
|
//
|
|
|
|
if(!strcmp((LPSTR)Args[1],(LPSTR)"NULL")) {
|
|
KeyDelete = TRUE;
|
|
}
|
|
else
|
|
{
|
|
cbAscii = strlen((LPSTR)Args[1]) +1;
|
|
pString = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
if(pString == NULL)
|
|
break;
|
|
if(mbstowcs(pString, (LPSTR)Args[1],cbAscii) == -1)
|
|
break;
|
|
}
|
|
|
|
cbAscii = strlen((LPSTR)Args[2]) +1;
|
|
pIniFile = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
if(pIniFile == NULL)
|
|
break;
|
|
if(mbstowcs(pIniFile, (LPSTR)Args[2],cbAscii) == -1)
|
|
break;
|
|
|
|
#ifdef DEBUG
|
|
DbgPrint("File:%ws\n",pIniFile);
|
|
DbgPrint("String: %ws\n",pString);
|
|
DbgPrint("Section: %ws\n",pSectionName);
|
|
#endif
|
|
|
|
Status = WritePrivateProfileString (pSectionName,
|
|
AFPMGRKEY,
|
|
(KeyDelete == TRUE) ? (LPCTSTR)NULL : pString,
|
|
pIniFile);
|
|
|
|
} while (FALSE);
|
|
|
|
if(pIniFile != NULL)
|
|
LocalFree(pIniFile);
|
|
|
|
if(pSectionName != NULL)
|
|
LocalFree(pSectionName);
|
|
|
|
if(pString != NULL)
|
|
LocalFree(pString);
|
|
|
|
strcpy(ReturnTextBuffer ,Status ? (LPSTR)"SUCCESS": (LPSTR)"FAILED");
|
|
|
|
return Status;
|
|
|
|
}
|
|
BOOL
|
|
GetPrintProcDir (
|
|
DWORD cArgs,
|
|
LPTSTR Args[],
|
|
LPTSTR *TextOut
|
|
)
|
|
|
|
{
|
|
|
|
BOOL Status = FALSE;
|
|
DWORD BytesCopied;
|
|
LPTSTR wpProcFile = NULL;
|
|
*TextOut = (LPTSTR)ReturnTextBuffer;
|
|
|
|
do
|
|
{
|
|
wpProcFile = (LPTSTR)LocalAlloc(LPTR, 512);
|
|
|
|
if(wpProcFile == NULL)
|
|
break;
|
|
|
|
Status = GetPrintProcessorDirectory(NULL,
|
|
NULL,
|
|
1,
|
|
(LPBYTE)wpProcFile,
|
|
512,
|
|
&BytesCopied
|
|
);
|
|
|
|
if(Status) {
|
|
|
|
if(wcstombs(ReturnTextBuffer,wpProcFile,512) ==-1) {
|
|
Status = FALSE;
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
} while (FALSE);
|
|
|
|
if(wpProcFile != NULL)
|
|
LocalFree(wpProcFile);
|
|
|
|
if(!Status)
|
|
strcpy(ReturnTextBuffer ,(LPSTR)"FAILED");
|
|
|
|
return Status;
|
|
}
|
|
|
|
|
|
BOOL
|
|
AddPrintProc (
|
|
DWORD cArgs,
|
|
LPTSTR Args[],
|
|
LPTSTR *TextOut
|
|
)
|
|
|
|
{
|
|
|
|
BOOL Status = FALSE;
|
|
LPTSTR pPrintProcessorFile = NULL;
|
|
LPTSTR pPrintProcessor = NULL;
|
|
INT cbAscii;
|
|
|
|
*TextOut = (LPTSTR)ReturnTextBuffer;
|
|
|
|
do
|
|
{
|
|
if(cArgs != 2)
|
|
break;
|
|
|
|
cbAscii = strlen((LPSTR)Args[0]) +1;
|
|
|
|
pPrintProcessorFile = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
|
|
if(pPrintProcessorFile == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(pPrintProcessorFile, (LPSTR)Args[0],cbAscii) == -1)
|
|
break;
|
|
|
|
|
|
cbAscii = strlen((LPSTR)Args[1]) +1;
|
|
|
|
pPrintProcessor = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
|
|
if(pPrintProcessor == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(pPrintProcessor, (LPSTR)Args[1],cbAscii) == -1)
|
|
break;
|
|
|
|
Status = AddPrintProcessor(NULL, // Do local stuff only
|
|
NULL, // Use Current Environment
|
|
pPrintProcessorFile, // PSPRINT.DLL
|
|
pPrintProcessor
|
|
);
|
|
|
|
} while (FALSE);
|
|
|
|
if(pPrintProcessorFile != NULL)
|
|
LocalFree(pPrintProcessorFile);
|
|
|
|
if(pPrintProcessor != NULL)
|
|
LocalFree(pPrintProcessor);
|
|
|
|
strcpy(ReturnTextBuffer ,Status ? (LPSTR)"SUCCESS": (LPSTR)"FAILED");
|
|
return Status;
|
|
|
|
}
|
|
|
|
/* Delete the PSTODIB PSPRINT PrintProcessor
|
|
*
|
|
*
|
|
*/
|
|
|
|
BOOL
|
|
DeletePrintProc (
|
|
DWORD cArgs,
|
|
LPTSTR Args[],
|
|
LPTSTR *TextOut
|
|
)
|
|
|
|
{
|
|
|
|
BOOL Status = FALSE;
|
|
LPTSTR pPrintProcessorFile = NULL;
|
|
LPTSTR pPrintProcessor = NULL;
|
|
INT cbAscii;
|
|
|
|
*TextOut = (LPTSTR)ReturnTextBuffer;
|
|
|
|
do
|
|
{
|
|
if(cArgs != 2)
|
|
break;
|
|
|
|
cbAscii = strlen((LPSTR)Args[0]) +1;
|
|
|
|
pPrintProcessorFile = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
|
|
if(pPrintProcessorFile == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(pPrintProcessorFile, (LPSTR)Args[0],cbAscii) == -1)
|
|
break;
|
|
|
|
|
|
cbAscii = strlen((LPSTR)Args[1]) +1;
|
|
|
|
pPrintProcessor = (LPTSTR)LocalAlloc(LPTR, sizeof(WCHAR) * cbAscii);
|
|
|
|
if(pPrintProcessor == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(pPrintProcessor, (LPSTR)Args[1],cbAscii) == -1)
|
|
break;
|
|
|
|
Status = DeletePrintProcessor( pPrintProcessorFile,
|
|
NULL, // Use Current Environment
|
|
pPrintProcessor
|
|
);
|
|
|
|
} while (FALSE);
|
|
|
|
if(pPrintProcessorFile != NULL)
|
|
LocalFree(pPrintProcessorFile);
|
|
|
|
if(pPrintProcessor != NULL)
|
|
LocalFree(pPrintProcessor);
|
|
|
|
|
|
strcpy(ReturnTextBuffer ,Status ? (LPSTR)"SUCCESS": (LPSTR)"FAILED");
|
|
return Status;
|
|
|
|
}
|
|
|
|
BOOL
|
|
SfmAddPrintMonitor (
|
|
DWORD cArgs,
|
|
LPTSTR Args[],
|
|
LPTSTR *TextOut
|
|
)
|
|
|
|
{
|
|
|
|
BOOL Status = FALSE;
|
|
LPTSTR wpMonName = NULL;
|
|
INT cbAscii = 0;
|
|
LPSTR pMonInfoBuffer = NULL;
|
|
TCHAR MonDllName[] = L"sfmmon.dll";
|
|
PMONITOR_INFO_2 pmoninfo;
|
|
|
|
*TextOut = (LPTSTR)ReturnTextBuffer;
|
|
|
|
do {
|
|
|
|
if(cArgs != 1)
|
|
break;
|
|
|
|
cbAscii = strlen((LPSTR)Args[0]) + 1;
|
|
|
|
wpMonName = (LPTSTR)LocalAlloc(LPTR,sizeof(WCHAR) * cbAscii);
|
|
|
|
if(wpMonName == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(wpMonName, (LPSTR)Args[0], cbAscii) == -1)
|
|
break;
|
|
|
|
pMonInfoBuffer = (LPSTR) LocalAlloc(LPTR, 512);
|
|
|
|
if(pMonInfoBuffer == NULL)
|
|
break;
|
|
|
|
pmoninfo = (PMONITOR_INFO_2)pMonInfoBuffer;
|
|
pmoninfo->pName = wpMonName;
|
|
pmoninfo->pEnvironment = NULL;
|
|
pmoninfo->pDLLName = MonDllName;
|
|
|
|
#ifdef DEBUG
|
|
DbgPrint("ADDPRINTMONITOR Name : %ws\n", pmoninfo->pName);
|
|
DbgPrint("ADDPRINTMONITOR Dll Name : %ws\n", pmoninfo->pDLLName);
|
|
#endif
|
|
|
|
Status = AddMonitor( NULL,
|
|
2,
|
|
(LPSTR)pMonInfoBuffer
|
|
);
|
|
|
|
}while(FALSE);
|
|
|
|
if(wpMonName != NULL)
|
|
LocalFree(wpMonName);
|
|
|
|
if(pMonInfoBuffer != NULL)
|
|
LocalFree(pMonInfoBuffer);
|
|
|
|
strcpy(ReturnTextBuffer ,Status ? (LPSTR)"SUCCESS": (LPSTR)"FAILED");
|
|
|
|
return Status;
|
|
|
|
}
|
|
|
|
BOOL
|
|
SfmDeletePrintMonitor (
|
|
DWORD cArgs,
|
|
LPTSTR Args[],
|
|
LPTSTR *TextOut
|
|
)
|
|
|
|
{
|
|
|
|
BOOL Status = FALSE;
|
|
LPTSTR wpMonName = NULL;
|
|
INT cbAscii;
|
|
*TextOut = (LPTSTR)ReturnTextBuffer;
|
|
|
|
do
|
|
{
|
|
|
|
if(cArgs !=1)
|
|
break;
|
|
|
|
cbAscii = strlen((LPSTR)Args[0]) + 1;
|
|
|
|
wpMonName = (LPTSTR)LocalAlloc(LPTR,sizeof(WCHAR) * cbAscii);
|
|
|
|
if(wpMonName == NULL)
|
|
break;
|
|
|
|
if(mbstowcs(wpMonName, (LPSTR)Args[0], cbAscii) == -1)
|
|
break;
|
|
|
|
Status = DeleteMonitor( NULL,
|
|
NULL,
|
|
wpMonName
|
|
);
|
|
}while(FALSE);
|
|
|
|
if(wpMonName != NULL)
|
|
LocalFree(wpMonName);
|
|
|
|
strcpy(ReturnTextBuffer ,Status ? (LPSTR)"SUCCESS": (LPSTR)"FAILED");
|
|
|
|
return Status;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|