CHGFLPSD.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////
  2. //
  3. //  Client.c --
  4. //
  5. //      This program is a command line oriented
  6. //      demonstration of the FloppyLocker service
  7. //      sample, aka floplock.exe
  8. //
  9. //      Copyright 1992-1997, Microsoft Corp.  All Rights Reserved
  10. /****************************************************************************
  11. *  INCLUDES, DEFINES, TYPEDEFS
  12. ****************************************************************************/
  13. #define STRICT
  14. #include <windows.h>
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #define PERR(api) printf("n%s: Error %d from %s on line %d",  
  19.     __FILE__, GetLastError(), api, __LINE__);
  20. #define PMSG(msg) printf("n%s line %d: %s",  
  21.     __FILE__, __LINE__, msg);
  22. /****************************************************************************
  23. * GLOBAL VARIABLES
  24. ****************************************************************************/
  25. #define              SZ_NAME_BUF 30
  26. UCHAR   ucMchNameBuf[SZ_NAME_BUF] = "";
  27. LPTSTR  lpszMchName = (LPTSTR)&ucMchNameBuf;
  28. UCHAR   ucOperation;
  29. /****************************************************************************
  30. * FUNCTION PROTOTYPES
  31. ****************************************************************************/
  32. BOOL CrackArgs(UINT argc, char *argv[]);
  33. VOID DisplayHelp(VOID);
  34. int main(int argc, char *argv[])
  35. {
  36.   char    inbuf[180];
  37.   char    outbuf[180];
  38.   DWORD   bytesRead;
  39.   BOOL    ret;
  40.   #define               SZ_PIPE_NAME_BUF 50
  41.   UCHAR   ucPipeNameBuf[SZ_PIPE_NAME_BUF] = "";
  42.   LPTSTR  lpszPipeName = (LPTSTR)&ucPipeNameBuf;
  43.   // check if Win32s, if so, display notice and terminate
  44.       if( GetVersion() & 0x80000000 )
  45.       {
  46.         MessageBox( NULL,
  47.            "This application cannot run on Windows 3.1 or Windows 95.n"
  48.            "This application will now terminate.",
  49.            "SD_FLPPY",
  50.            MB_OK | MB_ICONSTOP | MB_SETFOREGROUND );
  51.         return( 1 );
  52.       }
  53.   if (!CrackArgs(argc,argv))
  54.     exit(1);
  55.   strcpy(lpszPipeName,lpszMchName);
  56.   strcat(lpszPipeName,"\pipe\sd_flppy");
  57.   outbuf[0] = ucOperation;
  58.   outbuf[1] = '';
  59.   ret = CallNamedPipe(lpszPipeName,
  60.                       outbuf,
  61.                       sizeof(outbuf),
  62.                       inbuf,
  63.                       sizeof(inbuf),
  64.                       &bytesRead,
  65.                       NMPWAIT_WAIT_FOREVER);
  66.   if (!ret)
  67.   { if (ERROR_ACCESS_DENIED == GetLastError())
  68.     { printf("nAccess deniedn");
  69.     }
  70.     else if (ERROR_BAD_NETPATH == GetLastError())
  71.     { printf("nMachine %s not foundn",lpszMchName);
  72.     }
  73.     else
  74.     { PERR("CallNamedPipe");
  75.     }
  76.     exit(1);
  77.   }
  78.   printf("n%s %sn",lpszMchName,inbuf);
  79. }
  80. /****************************************************************************
  81. *
  82. * FUNCTION: CrackArgs
  83. *
  84. ****************************************************************************/
  85. BOOL CrackArgs(UINT argc, char *argv[])
  86. {
  87.   char *p;
  88.   /**************************************************************************
  89.   *
  90.   * There must be two arguments
  91.   *
  92.   **************************************************************************/
  93.   if (argc != 3)
  94.   { DisplayHelp();
  95.     return(FALSE);
  96.   }
  97.   p=argv[1];
  98.   /**************************************************************************
  99.   *
  100.   * The machine name argument must be 3 to (SZ_NAME_BUF-3) chars long
  101.   *
  102.   **************************************************************************/
  103.   if ((strlen(p) < 3) || (strlen(p) > (SZ_NAME_BUF-3) ))
  104.   { DisplayHelp();
  105.     return(FALSE);
  106.   }
  107.   /**************************************************************************
  108.   *
  109.   * The first two chars in the machine name argument must be 
  110.   *
  111.   **************************************************************************/
  112.   if ('\' != *p)
  113.   { DisplayHelp();
  114.     return(FALSE);
  115.   }
  116.   if ('\' != *(p+1))
  117.   { DisplayHelp();
  118.     return(FALSE);
  119.   }
  120.   /**************************************************************************
  121.   *
  122.   * Set up the machine name
  123.   *
  124.   **************************************************************************/
  125.   strcpy(lpszMchName,"\\");
  126.   strcat(lpszMchName,(p+2));
  127.   p=argv[2];
  128.   /**************************************************************************
  129.   *
  130.   * The switch argument must be 2 chars long
  131.   *
  132.   **************************************************************************/
  133.   if (strlen(p) != 2)
  134.   { DisplayHelp();
  135.     return(FALSE);
  136.   }
  137.   /**************************************************************************
  138.   *
  139.   * The first char in the switch argument must be /
  140.   *
  141.   **************************************************************************/
  142.   if ('/' != *p)
  143.   { DisplayHelp();
  144.     return(FALSE);
  145.   }
  146.   /**************************************************************************
  147.   *
  148.   * Chars 2 must be U or L or Q
  149.   *
  150.   **************************************************************************/
  151.   switch (*(p+1))
  152.   { case 'u':
  153.     case 'U':
  154.       ucOperation = 'U';
  155.       break;
  156.     case 'l':
  157.     case 'L':
  158.       ucOperation = 'L';
  159.       break;
  160.     case 'q':
  161.     case 'Q':
  162.       ucOperation = 'Q';
  163.       break;
  164.     default :
  165.       DisplayHelp();
  166.       return(FALSE);
  167.   }
  168.   return(TRUE);
  169. }
  170. /****************************************************************************
  171. *
  172. * FUNCTION: DisplayHelp
  173. *
  174. ****************************************************************************/
  175. VOID DisplayHelp(VOID)
  176. {
  177.   printf("nusage: chgflpsd \\machinenam /switch");
  178.   printf("n                  Values for /switch");
  179.   printf("n                        /u      Unlock");
  180.   printf("n                        /l      Lock");
  181.   printf("n                        /q      Queryn");
  182.   printf("nFor example to manage DACLs on machine \\flip5's floppies");
  183.   printf("n       chgflpsd \\flip5 /u      Gives access to everyone");
  184.   printf("n       chgflpsd \\flip5 /l      Gives access to only local admins");
  185.   printf("n       chgflpsd \\flip5 /q      Query current access on \\flip5n");
  186.   return;
  187. }