home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 January / VPR0101A.BIN / OLS / TAR32053 / tar32053.exe / SRC / NT_SECU.C < prev    next >
C/C++ Source or Header  |  1999-05-23  |  2KB  |  74 lines

  1. #ifndef __DEFCONF_H
  2. #include "defconf.h"
  3. #endif
  4. /* by tantan */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <windows.h>
  8.  
  9. /*************************************************************************\
  10. *
  11. *  関数名: backup_sec()
  12. *
  13. *  説明: ファイルのセキュリティ情報をファイルに保存
  14. *
  15. \*************************************************************************/
  16. void backup_sec(char *name,FILE *fp)
  17. {
  18.     DWORD   required;
  19.     TCHAR   buf[4096];
  20.     BOOL    status;
  21.     int  bufsize=1;
  22.  
  23. resize:
  24.  
  25.     if ((status = GetFileSecurity(name,
  26.                   OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION
  27.                               | DACL_SECURITY_INFORMATION ,
  28.                   buf,
  29.                   bufsize,
  30.                   &required)) == FALSE) {
  31.         if(required != 0){
  32. /*            fprintf(stderr, "%s: error more sd %d  now %d\n", name, required,bufsize);*/
  33.             bufsize = required;
  34.         if (bufsize >= 4096){
  35.                fprintf(stderr, "%s: error more sd %d  now 4096\n", name, required);
  36.         exit(1);
  37.         }
  38.             goto resize;
  39.         }else
  40.             fprintf(stderr, "%s: error %d\n", name, GetLastError());
  41.         return;
  42.     }
  43.     fwrite(&bufsize,4,1,fp);  /* header 4byte integer */
  44.     fwrite(buf,bufsize,1,fp); /* Security Description */
  45. }
  46.  
  47. /*************************************************************************\
  48. *
  49. *  関数名: restore_sec()
  50. *
  51. *  説明: ファイルのセキュリティ情報をファイルからリストア
  52. *
  53. \*************************************************************************/
  54. void restore_sec(char *name,FILE *fp)
  55. {
  56.     TCHAR   buf[4096];
  57.     BOOL    status;
  58.     int bufsize;
  59.  
  60.     fread(&bufsize,4,1,fp);  /* header 4byte integer */
  61.     fread(buf,bufsize,1,fp); /* Security Description */
  62.  
  63. /*   printf("name %s \n",name);*/
  64.  
  65.     if ((status = SetFileSecurity(name,
  66.                   OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION
  67.                               | DACL_SECURITY_INFORMATION ,
  68.                   buf)) == FALSE) {
  69.             fprintf(stderr, "%s: error %d\n", name, GetLastError());
  70.         return;
  71.     }
  72. }
  73.  
  74.