Q - I just started to use Elliott 8.5, on a user's computer, with the EL850.EXE utility, I created the Run Local icon for the user on the desktop. When I logged in to Elliott 8.5 for the first time, right after the system prompted me for the user ID and password, the following message showed up:
DDF Error Trying to Create File
SYSPASS: DDF shared memory not availableFile:M:\Elliott7\SYSPASS.DATProcessing will continue.
What does this message mean?
A - The root cause of this problem has to do with NTFS security and the new Windows OS. The following are the conditions that will cause this error to happen:
- You implemented NTFS security on your Elliott folder per our recommendation in this article: http://support.elliott.com/knowledgebase/articles/654601-elliott-8-directory-structure-and-ntfs-rights
- The user had minimum rights to the Elliott root folder per KB article above.
- You were running on a newer Windows OS like Windows 10.
- In your Elliott configuration file (<ElliottRoot\Bin\EL800.CFG or <ElliottRoot>\Bin85\EL850.CFG), the flag RequireDDF is set to "Yes."
The Cause of This Problem
- The root of this problem is when you implemented our suggested NTFS security, your user only had sufficient right to "List Folder Contents" for your Elliott root directory. This right is interpreted differently between Windows operating systems. With the older Windows OS, it means you can see the sub folder and files under the Elliott root directory. With the newer OS, like Windows 10, you can see the sub folders, but you can see the files under the Elliott root directory with just the "List Folder Contents" right.
- When you have the flag "RequireDDF" set to "Yes," it means when a file is opened I-O, our system will first check to see if the file exists. Since you are running on a newer Windows OS, the check file exist routine returns negative. Since the file does not exist, the system will create the file automatically. In order to make the file index SQL compliant, it will try to read the DDF to retrieve the SQL compliant index structure so the file can be created to be compatible with the SQL relational operation.
- But when you first start up, the DDF is loaded to your computer memory with a different thread, and it will take some time to complete. When the original thread finds the first file SYSPASS, it tries to open I-O and it does not exist, so it references the DDF table in the memory. Since the loading of DDF to the memory is not complete, you get this error message.
Why This Is Not a Problem for Elliott 8.2
In Elliott 8.2, the flag RequireDDF is set to "No" by default. On the other hand, in Elliott 8.5, this flag is set to "Yes" by default.
The reason is that Elliott 8.2 does not depend on all PSQL relational operations. But the Elliott 8.5 Report Desk feature uses PSQL relational operations exclusively. We need to ensure all new tables created in Elliott are SQL compliant.
At this moment, simply execute the utility <ElliottRoot>\Bin85\EL850CF.EXE and go to the "Options" tab. Under the "DDF Option" section, uncheck the "Require DDFs to create non-work files" option. See sample screen below:
In the future, we will develop a different mechanism to check if the file exists and to ensure that functionality will work even if the user can't see that file due to NTFS security limitations.