Solved

500 points Win2000 NTFS question

Posted on 2000-05-15
10
309 Views
Last Modified: 2013-12-03
I give 500 points for this question:

I need to read a Win2000 encrypted file and then write its entire contents to an other file using ReadEncryptedFileRaw/WriteEncryptedFileRaw APIs from advapi.dll

These APIs seem not to work properly. This is the code I use:


BYTE      g_Buf[10000];
DWORD       g_BufLen;
void   *d_pv;


DWORD RRead(PBYTE pbData, PVOID pvCallbackContext, ULONG ulLength)
{
      memcpy(g_Buf, pbData, ulLength);
      g_BufLen = ulLength;

      return 0;
}


DWORD WWrite(PBYTE pbData, PVOID pvCallbackContext, PULONG ulLength)
{
      memcpy(pbData, g_Buf, g_BufLen);
      *ulLength = g_BufLen;

      return 0;
}


OpenEncryptedFileRaw("c:\\Test.txt", 0, &g_pv);
ReadEncryptedFileRaw((PFE_EXPORT_FUNC)RRead, NULL, g_pv);
CloseEncryptedFileRaw(g_pv);

OpenEncryptedFileRaw("c:\\TestCpy.txt", CREATE_FOR_IMPORT, &g_pv);
WriteEncryptedFileRaw((PFE_IMPORT_FUNC)WWrite, NULL, g_pv);
CloseEncryptedFileRaw(g_pv);

What is wrong with this code?
0
Comment
Question by:alex1234
  • 5
  • 5
10 Comments
 
LVL 15

Expert Comment

by:NickRepin
Comment Utility
For 500 points + grade A, I'll answer this question.
But you have to increase the points first.
0
 
LVL 1

Author Comment

by:alex1234
Comment Utility
What is "grade A" and how many points do you want?
0
 
LVL 15

Expert Comment

by:NickRepin
Comment Utility
The title of your question is "500 points Win2000 NTFS question".
But the actual price is ZERO.
So, increase the actual price to 500 points, and I'll answer your question.
0
 
LVL 1

Author Comment

by:alex1234
Comment Utility
Adjusted points from 0 to 500
0
 
LVL 1

Author Comment

by:alex1234
Comment Utility
Go ahead...

However, I won't accept the answer if these APIs don't work just because of a bug in Windows files (advapi.dll or somewhere else). In this case please don't post the "answer", just use "comments" so I could delete this question later and not to loose the points.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 15

Expert Comment

by:NickRepin
Comment Utility
Don't worry, it works fine...

#include <windows.h>
#include <iostream.h>

//----------------------------
// There is a bug in the winbase.h, at least
// in my Platform SDK RC2.
// Callback functions must be defined as WINAPI:
//
// DWORD (WINAPI *PFE_EXPORT_FUNC)(...)
// DWORD (WINAPI *PFE_IMPORT_FUNC)(...)
//
//----------------------------


// The buffer must be large enough.
BYTE g_Buf[1024*1024*10];
DWORD g_BufLen=0,written=0;
PVOID pContext;

//
// Callbacks must be defined with WINAPI
//
DWORD WINAPI RRead(PBYTE pbData, PVOID /*pvCallbackContext*/, ULONG ulLength)
{
   cout<<"Read callback, len="<<ulLength<<endl;
   memcpy(g_Buf+g_BufLen,pbData,ulLength);
   g_BufLen+=ulLength;    
   return ERROR_SUCCESS;
}


DWORD WINAPI WWrite(PBYTE pbData,PVOID /*pvCallbackContext*/, PULONG ulLength)
{
   cout<<"Write callback, len="<<*ulLength;
   if(*ulLength>g_BufLen) *ulLength=g_BufLen;
   cout<<", used="<<*ulLength<<endl;
   memcpy(pbData,g_Buf+written,*ulLength);
   written+=*ulLength;
   g_BufLen-=*ulLength;
   return ERROR_SUCCESS;
}

void main()
{

   DWORD r;

   r=OpenEncryptedFileRaw("d:\\aa", 0, &pContext);
   cout<<"Open result="<<r<<' '<<GetLastError()<<endl;
   r=ReadEncryptedFileRaw((PFE_EXPORT_FUNC)RRead,0,pContext);
   cout<<"Read result="<<r<<' '<<GetLastError()<<endl;
   cout<<"Buf len="<<g_BufLen<<endl;
   CloseEncryptedFileRaw(pContext);
   cout<<"Closed "<<endl<<endl;

   r=OpenEncryptedFileRaw("d:\\aa2", CREATE_FOR_IMPORT, &pContext);
   cout<<"Open result="<<r<<' '<<GetLastError()<<endl;
   r=WriteEncryptedFileRaw((PFE_IMPORT_FUNC)WWrite,0,pContext);
   cout<<"Write result="<<r<<' '<<GetLastError()<<endl;
   CloseEncryptedFileRaw(pContext);
   cout<<"Closed "<<endl;
}
0
 
LVL 15

Accepted Solution

by:
NickRepin earned 500 total points
Comment Utility
The answer is above
0
 
LVL 1

Author Comment

by:alex1234
Comment Utility
// There is a bug in the winbase.h, at least
// in my Platform SDK RC2.
// Callback functions must be defined as WINAPI:

Nick,

that is exactly what I suspected: a bug in Windows files. I just couldn'd find where...
This "WINAPI" declaration makes whole the difference. Anyway, I accept your answer. Thanks.  
0
 
LVL 15

Expert Comment

by:NickRepin
Comment Utility
Also you incorrectly used callback functions...
0
 
LVL 1

Author Comment

by:alex1234
Comment Utility
My callback functions were used for a "single callback" call only (really small file). The whole idea is those WINAPI. Whithout WINAPI callback functions get called only one time.
0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

This article describes how to programmatically preset the "Pages per Sheet" option that's available with most printer drivers.   This setting lets you do "n-Up" printing, where two, four, or more pages are printed on each sheet of paper. If your …
Whether you've completed a degree in computer sciences or you're a self-taught programmer, writing your first lines of code in the real world is always a challenge. Here are some of the most common pitfalls for new programmers.
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now