--- spal60sr\src\TSSGCtrl\SSCopy.original.cpp	Mon Jan 13 00:40:34 2003
+++ spal60sr\src\TSSGCtrl\SSCopy.cpp	Mon Jan 13 00:40:34 2003
@@ -1,5 +1,13 @@
 #include "SSCopy.h"
 
+#define LOCAL_MEMORY_SUPPORT 1
+#define FIX_SSCOPY           1
+
+#if defined(LOCAL_MEMORY_SUPPORT) && LOCAL_MEMORY_SUPPORT
+BOOLEAN __stdcall TSSGCtrl_OneRead_with_CheckLocalMemory(TSSGCtrl *_this, TSSGSubject *SSGS, HANDLE ProcessHandle, DWORD Address, LPVOID Data, DWORD Size, const string &AddressStr);
+BOOLEAN __stdcall TSSGCtrl_OneWrite_with_CheckLocalMemory(TSSGCtrl *_this, TSSGSubject *SSGS, HANDLE ProcessHandle, DWORD Address, LPVOID Data, DWORD Size, const string &AddressStr);
+#endif
+
 //---------------------------------------------------------------------
 //uݒ֐v
 //
@@ -32,6 +40,9 @@
  lockStr		= tmpV[1];
 
  isSeted = true;
+#if defined(FIX_SSCOPY) && FIX_SSCOPY
+ SSGC.SetLock(true, this, new TSSArgBool(true));
+#endif
 }
 //---------------------------------------------------------------------
 //uf[^݊֐v
@@ -40,22 +51,34 @@
 //---------------------------------------------------------------------
 unsigned long TSSCopy::Write(TSSGCtrl &SSGC, TSSArg *Arg)
 {
-
+#if !defined(FIX_SSCOPY) || !FIX_SSCOPY
  Setting(SSGC);
+#endif
 
  TSmartHandle SHandle;
+#if !defined(LOCAL_MEMORY_SUPPORT) || !LOCAL_MEMORY_SUPPORT
  if(( SHandle=SSGC.Open(this, PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_VM_OPERATION) )==NULL)
 	return ssgCtrl::reOPEN_ERROR;	//vZX̃I[vG[
+#else
+ SHandle = SSGC.Open(this, PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION);
+#endif
 
  if(!SSGC.IsEnabled(this)) return ssgCtrl::reNOT_ENABLED;	//LU
 
 
  //Kp
  unsigned long Address = SSGC.GetAddress(this, addressStr);
+#if defined(SUBJECT_STATUS) && SUBJECT_STATUS
+ address = (const BYTE *)Address;
+#endif
  unsigned long SrcAddress = SSGC.GetAddress(this, srcAddressStr);
  
  byte *Data = new byte(size+1);
+#if !defined(LOCAL_MEMORY_SUPPORT) || !LOCAL_MEMORY_SUPPORT
  if(!SSGC.OneRead(this, SHandle, SrcAddress, Data, size)){
+#else
+ if (!TSSGCtrl_OneRead_with_CheckLocalMemory(&SSGC, this, SHandle, SrcAddress, Data, size, srcAddressStr)) {
+#endif
 	//s
 	delete Data;
 	return ssgCtrl::reACCESS_ERROR;	//G[Ȃ1Ԃ
@@ -67,13 +90,21 @@
 	delete Data;
 
 	Num = SSGC.CheckIO_FEP(this, Num, true);
+#if !defined(LOCAL_MEMORY_SUPPORT) || !LOCAL_MEMORY_SUPPORT
 	if(!SSGC.OneWrite(this, SHandle, Address, &Num, size)){
+#else
+	if (!TSSGCtrl_OneWrite_with_CheckLocalMemory(&SSGC, this, SHandle, Address, &Num, size, addressStr)) {
+#endif
 		//s
 		return ssgCtrl::reACCESS_ERROR;	//G[Ȃ1Ԃ
 	}
 	SSGC.CheckFunnel(this, Num);
  }else{
+#if !defined(LOCAL_MEMORY_SUPPORT) || !LOCAL_MEMORY_SUPPORT
 	if(!SSGC.OneWrite(this, SHandle, Address, Data, size)){
+#else
+	if (!TSSGCtrl_OneWrite_with_CheckLocalMemory(&SSGC, this, SHandle, Address, Data, size, addressStr)) {
+#endif
 		//s
 		delete Data;
 		return ssgCtrl::reACCESS_ERROR;	//G[Ȃ1Ԃ
