コード例 #1
0
int GetFileOwner (const char *Computer, const char *Name, char *Owner)
{
    SECURITY_INFORMATION si = OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION;
    SECURITY_DESCRIPTOR *sd;
    char sddata[500];
    *Owner=0;
    sd=(SECURITY_DESCRIPTOR *)sddata;

    char AnsiName[NM];
    OemToChar(Name,AnsiName);
    SetFileApisToANSI();
    DWORD Needed;
    int GetCode=GetFileSecurity(AnsiName,si,sd,sizeof(sddata),&Needed);
    SetFileApisToOEM();

    if (!GetCode || (Needed>sizeof(sddata)))
        return(FALSE);
    PSID pOwner;
    BOOL OwnerDefaulted;
    if (!GetSecurityDescriptorOwner(sd,&pOwner,&OwnerDefaulted))
        return(FALSE);
    char AccountName[200],DomainName[200];
    DWORD AccountLength=sizeof(AccountName),DomainLength=sizeof(DomainName);
    SID_NAME_USE snu;
    if (!LookupAccountSid(Computer,pOwner,AccountName,&AccountLength,DomainName,&DomainLength,&snu))
        return(FALSE);
    CharToOem(AccountName,Owner);
    return(TRUE);
}
コード例 #2
0
ファイル: ArcMix.cpp プロジェクト: FarGroup/FarManager
void ConvertNameToShort(const char *Src,char *Dest)
{
  char ShortName[NM],AnsiName[NM];
  SetFileApisToANSI();
  OemToChar(Src,AnsiName);
  if (GetShortPathName(AnsiName,ShortName,sizeof(ShortName)))
    CharToOem(ShortName,Dest);
  else
    lstrcpy(Dest,Src);
  SetFileApisToOEM();
}
コード例 #3
0
ファイル: zmodifyer.cpp プロジェクト: daoluong/zpack-library
// 최초 한번만 실행
void zmodifyer::init() {

	static bool first = true;

	if( !first )
		return;

	first = false;

	//g_StdOut.SetStream( NULL );

#if defined(_WIN32) && !defined(UNDER_CE)
	SetFileApisToOEM(); // ??
#endif
}
コード例 #4
0
void TThreads::resume() {
   if (!inited) {
      SetFileApisToOEM();
      chandle[cnInput]  = GetStdHandle(STD_INPUT_HANDLE);
      chandle[cnOutput] = GetStdHandle(STD_OUTPUT_HANDLE);
      GetConsoleCursorInfo(chandle[cnOutput], &crInfo);
      GetConsoleScreenBufferInfo(chandle[cnOutput], &sbInfo);
      GetConsoleMode(chandle[cnInput],&consoleMode);
      consoleMode &= ~(ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT|ENABLE_WINDOW_INPUT);
      SetConsoleMode(chandle[cnInput],consoleMode);

      evpending = 0;
      inited = 1;
   }
}
コード例 #5
0
ファイル: WcxModule.cpp プロジェクト: 6520874/pcmanager
bool WcxArchive::pExtract( const char *lpDestPath )
{
	int nProcessed = 0;
	int nResult = 0;
	
	m_files.clear();
	while ( nResult == 0 )
	{
		tHeaderData HeaderData;
		memset (&HeaderData, 0, sizeof (HeaderData));

		nResult = m_pModule->m_pfnReadHeader (m_hArchive, &HeaderData);
		if( nResult!=0 )
			continue;
		
		char szDestPath[MAX_PATH] = {0};
		strcpy(szDestPath, lpDestPath);
		PathAppendA(szDestPath, HeaderData.FileName);
				
		int nProcessResult = 0;
		if ( (HeaderData.FileAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY )
		{
			CreateDirEx (szDestPath);
			nProcessResult = m_pModule->m_pfnProcessFile (m_hArchive, PK_SKIP, NULL, NULL);
			ATLASSERT(FALSE);
		}
		else
		{
			CreateDirs( szDestPath );

			SetFileApisToANSI();
			nProcessResult = m_pModule->m_pfnProcessFile (m_hArchive, PK_EXTRACT, NULL, szDestPath);
			SetFileApisToOEM();
			
			if(!nProcessResult)
				m_files.push_back( szDestPath );
		}
		
		if ( !nProcessResult  )
			nProcessed++;
	}
	return nProcessed!=0;
}
コード例 #6
0
ファイル: WcxModule.cpp プロジェクト: 6520874/pcmanager
bool WcxArchive::pOpenArchive( const char *lpFileName, int nOpMode )
{
	char szFilename[255] = {0};
	strcpy(szFilename, lpFileName);

	tOpenArchiveData OpenArchiveData = {0};
	OpenArchiveData.ArcName = szFilename;
	OpenArchiveData.OpenMode = (nOpMode == 0)?PK_OM_LIST:PK_OM_EXTRACT;

	SetFileApisToANSI();
	m_hArchive = m_pModule->m_pfnOpenArchive (&OpenArchiveData);
	SetFileApisToOEM();

	if(m_hArchive)
	{
		if (m_pModule->m_pfnSetProcessDataProc)
			m_pModule->m_pfnSetProcessDataProc (m_hArchive, ProcessDataProc);
		
		if (m_pModule->m_pfnSetChangeVolProc)
			m_pModule->m_pfnSetChangeVolProc (m_hArchive, ChangeVolProc);
	}

	return m_hArchive!=NULL;
}
コード例 #7
0
ファイル: junc.cpp プロジェクト: richardneish/ltrdata
int main(int argc, char **argv)
{
  struct
  {
    DWORD ReparseTag;
    WORD ReparseDataLength;
    WORD Reserved;
    WORD NameOffset;
    WORD NameLength;
    WORD DisplayNameOffset;
    WORD DisplayNameLength;
    BYTE Data[65536];
  } ReparseData = { 0 };

  if ((argc < 2) | (argc > 3))
    {
      fputs("Syntax to create a junction point:\r\n"
	    "junc DIRECTORY TARGET\r\n"
	    "Where DIRECTORY is an empty directory on an NTFS volume and TARGET is a native\r\n"
	    "path to a target directory, e.g. \"\\??\\C:\\Windows\", \"\\??\\D:\\\" or\r\n"
	    "\"\\Device\\Harddisk0\\Partition1\". (Quotes are optional unless the path\r\n"
	    "contains spaces.)\r\n"
	    "\n"
	    "Syntax to display where a junction point points:\r\n"
	    "junc JUNCTIONPOINT\r\n"
	    "Where JUNCTIONPOINT is a junction point.\r\n", stderr);
      return 5;
    }

  SetFileApisToOEM();

  CharToOem(argv[1], argv[1]);

  HANDLE h;
  if (argc == 2)
    h = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ |
		   FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
		   FILE_FLAG_BACKUP_SEMANTICS |
		   FILE_FLAG_OPEN_REPARSE_POINT, NULL);
  else
    {
      h = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE,
		     FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
		     FILE_FLAG_BACKUP_SEMANTICS |
		     FILE_FLAG_OPEN_REPARSE_POINT, NULL);
      if ((h == INVALID_HANDLE_VALUE) &&
	  (GetLastError() == ERROR_FILE_NOT_FOUND))
	{
	  CreateDirectory(argv[1], NULL);
	  h = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE,
			 FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
			 FILE_FLAG_BACKUP_SEMANTICS |
			 FILE_FLAG_OPEN_REPARSE_POINT, NULL);
	}
    }

  if (h == INVALID_HANDLE_VALUE)
    {
      win_perror(argv[1]);
      return 1;
    }

  DWORD dw;
  if (argc > 2)
    {
      WORD wSize =
	(MultiByteToWideChar(CP_ACP, 0, argv[2], -1, NULL, 0)-1) << 1;

      if ((wSize + 6 > sizeof(ReparseData.Data)) | (wSize == 0))
	{
	  fprintf(stderr, "Name is too long: '%ws'\n", argv[2]);
	  return 4;
	}

      ReparseData.ReparseTag = IO_REPARSE_TAG_MOUNT_POINT;
      ReparseData.ReparseDataLength = 8 + wSize + 4;
      ReparseData.NameLength = wSize;
      ReparseData.DisplayNameOffset = (wSize + 2);
      MultiByteToWideChar(CP_ACP, 0, argv[2], -1, (LPWSTR)ReparseData.Data,
			  sizeof(ReparseData.Data) - 6);
      CharToOem(argv[2], argv[2]);

      if (!DeviceIoControl(h, FSCTL_SET_REPARSE_POINT, &ReparseData,
			   8 + 8 + wSize + 4, NULL, 0, &dw, NULL))
	{
	  switch (GetLastError())
	    {
	    case ERROR_INVALID_REPARSE_DATA:
	      fprintf(stderr, "Invalid target path: '%s'\n", argv[2]);
	      return 1;
	    case ERROR_INVALID_PARAMETER:
	      fputs("This OS does not support reparse points.\r\n",
		    stderr);
	      break;
	    case ERROR_INVALID_FUNCTION: case ERROR_NOT_A_REPARSE_POINT:
	      fputs("This filesystem does not support reparse points.\r\n",
		    stderr);
	      break;
	    case ERROR_DIRECTORY: case ERROR_DIR_NOT_EMPTY:
	      fputs("Reparse points can only created on empty "
		    "directories.\r\n", stderr);
	      break;
	    default:
	      WErrMsg errmsg;
	      CharToOem(errmsg, errmsg);
	      fprintf(stderr,
		      "Error joining '%s' to '%s'\n"
		      "%u: %s", argv[2], argv[1], GetLastError(),
		      errmsg);
	    }

	  return 1;
	}

      return 0;
    }

  if (!DeviceIoControl(h, FSCTL_GET_REPARSE_POINT, NULL, 0, &ReparseData,
		       sizeof ReparseData, &dw, NULL))
    {
	  switch (GetLastError())
	    {
	    case ERROR_INVALID_REPARSE_DATA:
	      fprintf(stderr, "The reparse data on '%s' is invalid\n",
		      argv[1]);
	      return 1;
	    case ERROR_INVALID_PARAMETER:
	      fputs("This OS does not support reparse points.\r\n",
		    stderr);
	      break;
	    case ERROR_INVALID_FUNCTION:
	      fputs("This filesystem does not support reparse points.\r\n",
		    stderr);
	      break;
	    case ERROR_NOT_A_REPARSE_POINT:
	    case ERROR_DIRECTORY:
	    case ERROR_DIR_NOT_EMPTY:
	      fprintf(stderr, "Not a reparse point: '%s'\n", argv[1]);
	      break;
	    default:
	      WErrMsg errmsg;
	      CharToOem(errmsg, errmsg);
	      fprintf(stderr,
		      "Error getting reparse data from '%s'\n"
		      "%u: %s",
		      argv[2], GetLastError(), errmsg);
	    }

	  return 1;
    }

  if (ReparseData.ReparseTag != IO_REPARSE_TAG_MOUNT_POINT)
    {
      fputs("This reparse point is not a junction.\r\n", stderr);
      return 2;
    }

  printf("%s -> %*ws\n",
	 argv[1],
	 ReparseData.NameLength >> 1,
	 ReparseData.Data + ReparseData.NameOffset);

  return 0;
}
コード例 #8
0
	virtual void Prologue() override { SetFileApisToOEM(); OEMApiCnt++; }
コード例 #9
0
ファイル: binkd.c プロジェクト: askovpen/binkd
int main (int argc, char *argv[])
#endif
{
  char tmp[128];
#if defined(HAVE_FORK)
  char **saved_argv;

  mypid = getpid();
  /* save argv as setproctitle() under some systems will change it */
  saved_argv = mkargv (argc, argv);

  configpath = parseargs(argc, saved_argv);
#else
  configpath = parseargs(argc, argv);
#endif

  saved_envp = mkargv (-1, environ);

#ifdef WIN32
  if (service_flag==w32_installservice && !configpath)
    Log (0, "%s: invalid command line: config name must be specified", extract_filename(argv[0]));
  w32Init();
#ifdef BINKD9X
  {
    int win9x_rc;

    win9x_rc = win9x_process(argc, argv);
    if (win9x_rc != -1)
      return win9x_rc;
  }
#endif
#endif

  tzset();

  if (poll_flag && server_flag)
    Log (0, "-p and -s cannot be used together");

#if defined(WIN32) && !defined(BINKD9X)
  if (service_flag!=w32_noservice)
    if (service(argc, argv, environ) && service_flag!=w32_run_as_service) {
      Log(0, "Windows NT service error");
    }
  if (tray_flag)
     do_tray_flag();
  else
  {
    atexit(UnloadBinkdIcon);
    LoadBinkdIcon();
  }
#endif

  /* No command line options: run both client and server */
  if (!client_flag && !server_flag)
    client_flag = server_flag = 1;

  InitSem (&hostsem);
  InitSem (&resolvsem);
  InitSem (&lsem);
  InitSem (&blsem);
  InitSem (&varsem);
  InitSem (&config_sem);
  InitEventSem (&eothread);
  InitEventSem (&wakecmgr);
#ifdef OS2
  InitSem (&fhsem);
#endif

  /* Init for ftnnode.c */
  nodes_init ();

  if (configpath)
  {
    current_config = readcfg (configpath);
    if (!current_config)
      Log (0, "error in configuration, aborting");
    if (dumpcfg_flag)
    {
      debug_readcfg ();
      exit(0);
    }
    InitLog(current_config->loglevel, current_config->conlog,
            current_config->logpath, current_config->nolog.first);
  }
  else if (verbose_flag)
  {
#if defined(WIN32) && defined(BINKD9X)
    AllocTempConsole();
#endif

    printf ("Binkd " MYVER " (" __DATE__ " " __TIME__ "%s)\n", get_os_string ());
    if (verbose_flag>1)
    {
      printf ("Compilation flags: " _DBNKD ".\n");
      printf ("Facilities: "
#ifndef srv_getaddrinfo
              "fsp1035 "
#endif
#ifndef HAVE_GETADDRINFO
              "rfc2553emu "
#else
              "ipv6 "
#endif
              "\n");
    }
    exit (0);
  }
  else if (argc > 1)
    Log (0, "%s: invalid command line: config name must be specified", extract_filename(argv[0]));
  else
    usage ();

  print_args (tmp, sizeof (tmp), argv + 1);
#ifdef WIN32
  if (service_flag==w32_run_as_service)
    Log (4, "BEGIN service '%s', " MYNAME "/" MYVER "%s%s", service_name, get_os_string(), tmp);
  else
    Log (4, "BEGIN standalone, " MYNAME "/" MYVER "%s%s", get_os_string(), tmp);
#else
  Log (4, "BEGIN, " MYNAME "/" MYVER "%s%s", get_os_string(), tmp);
#endif
  if (sock_init ())
    Log (0, "sock_init: %s", TCPERR ());

  bsy_init ();
  rnd ();
  initsetproctitle (argc, argv, environ);
#ifdef WIN32
  SetFileApisToOEM();
#endif

  /* Set up break handler, set up exit list if needed */
  if (!set_break_handlers ())
    Log (0, "cannot install break handlers");

#if defined(SIGPIPE)
  signal(SIGPIPE, SIG_IGN);
#endif

#if defined(WITH_ZLIB) && defined(ZLIBDL)
  if (current_config->zlib_dll[0]) {
    if (!zlib_init(current_config->zlib_dll))
      Log (2, "cannot load %s, GZ compression disabled", current_config->zlib_dll);
    else
      Log (6, "%s loaded successfully", current_config->zlib_dll);
  } else
    Log (current_config->zrules.first ? 3 : 5, "zlib-dll not defined, GZ compression disabled");
#endif
#if defined(WITH_BZLIB2) && defined(ZLIBDL)
  if (current_config->bzlib2_dll[0]) {
    if (!bzlib2_init(current_config->bzlib2_dll))
      Log (2, "cannot load %s, BZ2 compression disabled", current_config->bzlib2_dll);
    else
      Log (6, "%s loaded successfully", current_config->bzlib2_dll);
  } else
    Log (current_config->zrules.first
#ifdef WITH_ZLIB
         && !zlib_loaded
#endif
         ? 3 : 5, "bzlib2-dll not defined, BZ2 compression disabled");
#endif

#ifdef WITH_PERL
  if (current_config->perl_script[0]) {
    if (!perl_init(current_config->perl_script, current_config)) {
      if (current_config->perl_strict)
        Log (0, "error parsing Perl script %s", current_config->perl_script);
    } else {
      perl_on_start(current_config);
      perl_config_loaded(current_config);
    }
  }
#endif

#ifdef HAVE_FORK
  signal (SIGCHLD, sighandler);
#endif

  { /* Create polls and release polls list */
    struct maskchain *psP;
    for (psP = psPolls.first; psP; psP = psP->next)
      poll_node (psP->mask, current_config);
    simplelist_free(&psPolls.linkpoint, destroy_maskchain);
  }

  if (no_flag)
    Log (0, "Exit on option '-n'");

  if (inetd_flag)
  {
    FTN_ADDR ftn_addr, *pftn_addr;
    int tempfd;

    pftn_addr = NULL;
    if (remote_node)
    {
      if (parse_ftnaddress (remote_node, &ftn_addr, current_config->pDomains.first))
      {
        char szFTNAddr[FTN_ADDR_SZ + 1];

        exp_ftnaddress (&ftn_addr, current_config->pAddr, current_config->nAddr, current_config->pDomains.first);
        pftn_addr = &ftn_addr;
        ftnaddress_to_str (szFTNAddr, pftn_addr);
        Log (3, "Session with %s", szFTNAddr);
      }
      else
        Log (1, "`%s' cannot be parsed as a Fido-style address", remote_node);
    }
    if (!remote_addr)
    {
      char *p = getenv("SSH_CONNECTION");

      if (p)
      {
	remote_addr = strdup(p);
	p = strchr(remote_addr, ' ');
	if (p) *p = '\0';
      }
    }
    /* not using stdin/stdout itself to avoid possible collisions */
    if (inetd_socket_in == -1)
      inetd_socket_in = dup(fileno(stdin));
    if (inetd_socket_out == -1)
      inetd_socket_out = dup(fileno(stdout));
#ifdef UNIX
    tempfd = open("/dev/null", O_RDWR);
#else
    tempfd = open("nul", O_RDWR);
#endif
    if (tempfd != -1)
    {
      dup2(tempfd, fileno(stdin));
      dup2(tempfd, fileno(stdout));
      close(tempfd);
    }
    protocol (inetd_socket_in, inetd_socket_out, NULL, pftn_addr, remote_addr, current_config);
    soclose (inetd_socket_out);
    exit (0);
  }

#ifdef BINKD_DAEMONIZE
  if (daemon_flag)
  {
    if (binkd_daemonize(1) < 0)
      Log (0, "Cannot daemonize");
    else
      mypid = getpid();
  }
#endif

#if defined(HAVE_FORK)
  signal (SIGHUP, sighandler);
#endif

  if (client_flag && !server_flag)
  {
    clientmgr (0);
    exit (0);
  }

  pidsmgr = (int) getpid ();
  if (client_flag && (pidcmgr = branch (clientmgr, 0, 0)) < 0)
  {
    Log (0, "cannot branch out");
  }

  if (*current_config->pid_file)
  {
    if ( unlink (current_config->pid_file) == 0 ) /* successfully unlinked, i.e.
	                                            an old pid_file was found */
	Log (1, "unexpected pid_file: %s: unlinked", current_config->pid_file);
    else
    {
	int current_log_level = 1;
	switch ( errno )
	{
	   case ENOENT :	/* file not found or null pathname */
		current_log_level = 8; /* it's ok */
		break;
	   default :
		break;
	}
	Log (current_log_level, "unlink_pid_file: %s: %s", current_config->pid_file, strerror (errno));
    }
    create_sem_file (current_config->pid_file, 1);
  }

  servmgr ();

  return 0;
}
コード例 #10
0
ファイル: support.c プロジェクト: cftyngit/nctuns
void silly_entry(void *peb) {
	char * path1=NULL;
	int rc;
	char temp[MAX_PATH+5];
	char buf[MAX_PATH];
	char ptr1[MAX_PATH];
	char ptr2[MAX_PATH];
	char ptr3[MAX_PATH];
	OSVERSIONINFO osver;


	init_wow64();

	// look at the explanation in fork.c for why we do these steps.
	if (bIsWow64Process) {
		HANDLE h64Parent,h64Child;
		char *stk, *end;
		DWORD mb = (1<<20);

		// if we found the events, then we're the product of a fork()
		if (CreateWow64Events(GetCurrentProcessId(),
								&h64Parent,&h64Child,TRUE)) {

			if (!h64Parent || !h64Child)
				return;

			// tell parent we're rolling
			SetEvent(h64Child);

			if(WaitForSingleObject(h64Parent,FORK_TIMEOUT) != WAIT_OBJECT_0) {
				return;
			}

			// if __forked is 0, we shouldn't have found the events
			if (!__forked) 
				return;
		}

		// now create the stack 

		if (!__forked) {
			stk = VirtualAlloc(NULL,mb+65536,MEM_COMMIT,PAGE_READWRITE);
			if (!stk) {
				dprintf("virtual alloc in parent failed %d\n",GetLastError());
				return;
			}
			end = stk + mb + 65536;
			end -= sizeof(char*);

			__fork_stack_begin = end;

			__asm {mov esp,end };

			set_stackbase(end);
			heap_init();
		}
		else { // child process
			stk = (char*)__fork_stack_begin + sizeof(char*)- mb - 65536;

			dprintf("begin is 0x%08x\n",stk);
			end = VirtualAlloc(stk, mb+65536 , MEM_RESERVE , PAGE_READWRITE);
			if (!end) {
				rc = GetLastError();
				dprintf("virtual alloc 1 in child failed %d\n",rc);
				return;
			}
			stk = VirtualAlloc(end, mb+65536 , MEM_COMMIT , PAGE_READWRITE);
			if (!stk) {
				rc = GetLastError();
				dprintf("virtual alloc 2 in child failed %d\n",rc);
				return;
			}
			end = stk + mb + 65536;
			__asm {mov esp, end};
			set_stackbase(end);

			SetEvent(h64Child);

			CloseHandle(h64Parent);
			CloseHandle(h64Child);
		}

	}


	SetFileApisToOEM();

	if (!bIsWow64Process)
		heap_init();


	osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

	if (!GetVersionEx(&osver)) {
		MessageBox(NULL,"GetVersionEx failed","tcsh",MB_ICONHAND);
		ExitProcess(0xFF);
	}
	gdwVersion = osver.dwMajorVersion;


	/* If home is set, we only need to change '\' to '/' */
	rc = GetEnvironmentVariable("HOME",buf,MAX_PATH);
	if (rc && (rc < MAX_PATH)){
		path_slashify(buf);
		(void)SetEnvironmentVariable("HOME",buf);
		goto skippy;
	}
	
	memset(ptr1,0,MAX_PATH);
	memset(ptr2,0,MAX_PATH);
	memset(ptr3,0,MAX_PATH);

	if(osver.dwPlatformId == VER_PLATFORM_WIN32_NT) {
	    GetEnvironmentVariable("USERPROFILE",ptr1,MAX_PATH);
	    GetEnvironmentVariable("HOMEDRIVE",ptr2,MAX_PATH);
	    GetEnvironmentVariable("HOMEPATH",ptr3,MAX_PATH);

		ptr1[MAX_PATH -1] = ptr2[MAX_PATH-1] = ptr3[MAX_PATH-1]= 0;

		if (!ptr1[0] || osver.dwMajorVersion <4) {
			wsprintf(temp,"%s%s",ptr2[0]?ptr2:"C:",ptr3[0]?ptr3:"\\");
		}
		else if (osver.dwMajorVersion >= 4) {
			wsprintf(temp,"%s",ptr1);
		}
	}
	else if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {

		rc = GetWindowsDirectory(ptr1,MAX_PATH);
		if (rc > MAX_PATH) {
			MessageBox(NULL,"This should never happen","tcsh",MB_ICONHAND);
			ExitProcess(0xFF);
		}
		wsprintf(temp,"%s",ptr1);
	}
	else {
		MessageBox(NULL,"Unknown platform","tcsh",MB_ICONHAND);
	}
	path_slashify(temp);
	SetEnvironmentVariable("HOME",temp);

skippy:
	gdwPlatform = osver.dwPlatformId;


	rc = GetEnvironmentVariable("Path",path1,0);
	if ( rc !=0) {

		path1 =heap_alloc(rc);

		GetEnvironmentVariable("Path",path1,rc);
		SetEnvironmentVariable("Path",NULL);
		/*SetEnvironmentVariable("PATH",NULL);*/
		SetEnvironmentVariable("PATH",path1);

		heap_free(path1);
	}
	mainCRTStartup(peb);
}