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 >
Wrap
C/C++ Source or Header
|
1999-05-23
|
2KB
|
74 lines
#ifndef __DEFCONF_H
#include "defconf.h"
#endif
/* by tantan */
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
/*************************************************************************\
*
* 関数名: backup_sec()
*
* 説明: ファイルのセキュリティ情報をファイルに保存
*
\*************************************************************************/
void backup_sec(char *name,FILE *fp)
{
DWORD required;
TCHAR buf[4096];
BOOL status;
int bufsize=1;
resize:
if ((status = GetFileSecurity(name,
OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION
| DACL_SECURITY_INFORMATION ,
buf,
bufsize,
&required)) == FALSE) {
if(required != 0){
/* fprintf(stderr, "%s: error more sd %d now %d\n", name, required,bufsize);*/
bufsize = required;
if (bufsize >= 4096){
fprintf(stderr, "%s: error more sd %d now 4096\n", name, required);
exit(1);
}
goto resize;
}else
fprintf(stderr, "%s: error %d\n", name, GetLastError());
return;
}
fwrite(&bufsize,4,1,fp); /* header 4byte integer */
fwrite(buf,bufsize,1,fp); /* Security Description */
}
/*************************************************************************\
*
* 関数名: restore_sec()
*
* 説明: ファイルのセキュリティ情報をファイルからリストア
*
\*************************************************************************/
void restore_sec(char *name,FILE *fp)
{
TCHAR buf[4096];
BOOL status;
int bufsize;
fread(&bufsize,4,1,fp); /* header 4byte integer */
fread(buf,bufsize,1,fp); /* Security Description */
/* printf("name %s \n",name);*/
if ((status = SetFileSecurity(name,
OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION
| DACL_SECURITY_INFORMATION ,
buf)) == FALSE) {
fprintf(stderr, "%s: error %d\n", name, GetLastError());
return;
}
}