package org.krakenapps.pcap.decoder.smb.request;
import org.krakenapps.pcap.decoder.smb.rr.ExtFileAttributes;
import org.krakenapps.pcap.decoder.smb.structure.SmbData;
//0xA2
public class NtCreateANDXRequest implements SmbData{
boolean malformed = false;
//flags
public static final int NT_CREATE_REQUEST_OPLOCK = 0x00000002;
public static final int NT_CREATE_REQUEST_OPBATCH = 0x00000004;
public static final int NT_CREATE_OPEN_TARGET_DIR = 0x00000008;
public static final int NT_CREATE_REQUEST_EXTENDED_RESPONSE = 0x00000010;
//flags
//impresionationlevel
public static final int SECURITY_ANONYMOUS = 0x00000000;
public static final int SECURITY_IDENTIFICATION = 0x00000001;
public static final int SECURITY_IMPRESIONATION = 0x00000002;
public static final int SECURITY_DELEGATION = 0x00000003;
//impresionationlevel
//Desired Access
public static final int FILE_READ_DATA = 0x00000001;
public static final int FILE_WRITE_DATA = 0x00000002;
public static final int FILE_APPEND_DATA = 0x00000004;
public static final int FILE_READ_EA = 0x00000008;
public static final int FILE_WIRTE_EA = 0x00000010;
public static final int FILE_EXECUTE = 0x00000020;
public static final int FILE_READ_ATTRIBUTES = 0x00000080;
public static final int FILE_WRITE_ATTRIBUTES = 0x00000100;
public static final int DELETE = 0x00010000;
public static final int READ_CONTROL = 0x00020000;
public static final int WRITE_DAC = 0x00040000;
public static final int WRITE_OWNER = 0x00080000;
public static final int SYNCHRONIZE = 0x00100000;
public static final int ACCESS_SYSTEM_SECURITY = 0x01000000;
public static final int MAXIMUM_ALLOWED = 0x02000000;
public static final int GENERIC_ALL = 0x10000000;
public static final int GENERIC_EXECUTE = 0x20000000;
public static final int GENERIC_WRITE = 0x40000000;
public static final int GENERIC_READ = 0x80000000;
//Desired Access
//shareAccess
public static final int FILE_SHARE_NONE = 0x00000000;
public static final int FILE_SHARE_READ = 0x00000001;
public static final int FILE_SHARE_WRITE = 0x00000002;
public static final int FILE_SHARE_DELETE = 0x00000004;
//shareAccess
//CreateDisposition
public static final int FILE_SUPERSEDE = 0x00000000;
public static final int FILE_OPEN = 0x00000001;
public static final int FILE_CREATE = 0x00000002;
public static final int FILE_OPEN_IF = 0x00000003;
public static final int FILE_OVERWIRTE = 0x00000004;
public static final int FILE_OVERWRITE_IF = 0x00000005;
//CreateDisposition
//CreateOption
public static final int FILE_DIRECTORY_FILE =0x00000001;
public static final int FILE_WIRTE_THOUGH = 0x00000002;
public static final int FILE_SEQUENCE_ONLY = 0x00000004;
public static final int FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008;
public static final int FILE_SYNCHRONOUS_IO_ALERT = 0x00000010;
public static final int FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020;
public static final int FILE_NON_DIRECTORY_FILE = 0x00000040;
public static final int FILE_CREATE_TREE_CONNECTION = 0x00000080;
public static final int FILE_COMPLETE_IF_OPLOCKED = 0x00000100;
public static final int FILE_NO_EA_KNOWLEDGE = 0x00000200;
public static final int FILE_OPEN_FOR_RECOVERY = 0x00000400;
public static final int FILE_RANDOM_ACCESS = 0x00000800;
public static final int FILE_DELETE_ON_CLOSE = 0x00001000;
public static final int FILE_OPEN_FILE_ID = 0x00002000;
public static final int FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000;
public static final int FILE_NO_COMPRESSION = 0x00008000;
public static final int FILE_RESERVE_OPFILTER = 0x00100000;
public static final int FILE_OPEN_NO_RECALL = 0x00400000;
public static final int FILE_OPEN_FOR_FREE_SPACE_QUEURY = 0x00800000;
//CreateOption
public static final byte SMB_SECURITY_CONTEXT_TRACKING = 0x01;
public static final byte SMB_SECURITY_EFFECTIVE_ONLY = 0x02;
//SecurityFlag
//SEcurityFlag
//param
byte wordCount;
byte andxCommand;
byte andxReserved;
short andxOffset;
byte reserved;
short nameLength;
int flags;
int rootDirectoryFID;
int desiredAccess;
long allocationSize;
ExtFileAttributes extFileAttributes;
int shareAccess;
int createDisposition;
int createOptions;
int impersonationLevel;
byte securityFlags;
//data
short byteCount;
String fileName;
public byte getWordCount() {
return wordCount;
}
public void setWordCount(byte wordCount) {
this.wordCount = wordCount;
}
public byte getAndxCommand() {
return andxCommand;
}
public void setAndxCommand(byte andxCommand) {
this.andxCommand = andxCommand;
}
public byte getAndxReserved() {
return andxReserved;
}
public void setAndxReserved(byte andxReserved) {
this.andxReserved = andxReserved;
}
public short getAndxOffset() {
return andxOffset;
}
public void setAndxOffset(short andxOffset) {
this.andxOffset = andxOffset;
}
public byte getReserved() {
return reserved;
}
public void setReserved(byte reserved) {
this.reserved = reserved;
}
public short getNameLength() {
return nameLength;
}
public void setNameLength(short nameLength) {
this.nameLength = nameLength;
}
public int getFlags() {
return flags;
}
public void setFlags(int flags) {
this.flags = flags;
}
public int getRootDirectoryFID() {
return rootDirectoryFID;
}
public void setRootDirectoryFID(int rootDirectoryFID) {
this.rootDirectoryFID = rootDirectoryFID;
}
public int getDesiredAccess() {
return desiredAccess;
}
public void setDesiredAccess(int desiredAccess) {
this.desiredAccess = desiredAccess;
}
public long getAllocationSize() {
return allocationSize;
}
public void setAllocationSize(long allocationSize) {
this.allocationSize = allocationSize;
}
public ExtFileAttributes getExtFileAttributes() {
return extFileAttributes;
}
public void setExtFileAttributes(ExtFileAttributes extFileAttributes) {
this.extFileAttributes = extFileAttributes;
}
public int getShareAccess() {
return shareAccess;
}
public void setShareAccess(int shortAccess) {
this.shareAccess = shortAccess;
}
public int getCreateDisposition() {
return createDisposition;
}
public void setCreateDisposition(int createDisposition) {
this.createDisposition = createDisposition;
}
public int getCreateOptions() {
return createOptions;
}
public void setCreateOptions(int createOptions) {
this.createOptions = createOptions;
}
public int getImpersonationLevel() {
return impersonationLevel;
}
public void setImpersonationLevel(int impersonationLevel) {
this.impersonationLevel = impersonationLevel;
}
public byte getSecurityFlags() {
return securityFlags;
}
public void setSecurityFlags(byte sercurityFlags) {
this.securityFlags = sercurityFlags;
}
public short getByteCount() {
return byteCount;
}
public void setByteCount(short byteCount) {
this.byteCount = byteCount;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public boolean isNtCreateRequestOplock()
{
if((this.flags & NT_CREATE_REQUEST_OPLOCK) == NT_CREATE_REQUEST_OPLOCK)
return true;
else
return false;
}
public boolean isNtCreateRequestOpbatch()
{
if((this.flags & NT_CREATE_REQUEST_OPBATCH) == NT_CREATE_REQUEST_OPBATCH)
return true;
else
return false;
}
public boolean isNtCreateOpenTargetDir()
{
if((this.flags & NT_CREATE_OPEN_TARGET_DIR) == NT_CREATE_OPEN_TARGET_DIR)
return true;
else
return false;
}
public boolean isNtCreateRequestExtendedResponse()
{
if((this.flags & NT_CREATE_REQUEST_EXTENDED_RESPONSE)==NT_CREATE_REQUEST_EXTENDED_RESPONSE)
return true;
else
return false;
}
public boolean isDesireFileReadData()
{
if((this.desiredAccess & FILE_READ_DATA) == FILE_READ_DATA)
return true;
else
return false;
}
public boolean isDesireFileWriteData()
{
if((this.desiredAccess & FILE_WRITE_DATA) ==FILE_READ_DATA)
return true;
else
return false;
}
public boolean isDesireFileAppendData()
{
if((this.desiredAccess & FILE_APPEND_DATA) == FILE_APPEND_DATA)
return true;
else
return false;
}
public boolean isDesireFileReadEa()
{
if((this.desiredAccess & FILE_READ_EA) == FILE_READ_EA)
return true;
else
return false;
}
public boolean isDesireFileWirteEa()
{
if((this.desiredAccess & FILE_WIRTE_EA) == FILE_WIRTE_EA)
return true;
else
return false;
}
public boolean isDesireFileExecute()
{
if((this.desiredAccess & FILE_EXECUTE) == FILE_EXECUTE)
return true;
else
return false;
}
public boolean isDesireFileReadAttributes()
{
if((this.desiredAccess & FILE_READ_ATTRIBUTES) == FILE_READ_ATTRIBUTES)
return true;
else
return false;
}
public boolean isDesireFileWriteAttiributes()
{
if((this.desiredAccess & FILE_WRITE_ATTRIBUTES) == FILE_WRITE_ATTRIBUTES)
return true;
else
return false;
}
public boolean isDesiredDelete()
{
if((this.desiredAccess & DELETE) == DELETE)
return true;
else
return false;
}
public boolean isDesireReadContorl()
{
if((this.desiredAccess & READ_CONTROL) == READ_CONTROL)
return true;
else
return false;
}
public boolean isDesireWriteDac()
{
if((this.desiredAccess & WRITE_DAC) == WRITE_DAC)
return true;
else
return false;
}
public boolean isDesireWriteOwner()
{
if((this.desiredAccess & WRITE_OWNER) == WRITE_OWNER)
return true;
else
return false;
}
public boolean isDesireSynchronize()
{
if((this.desiredAccess & SYNCHRONIZE) == SYNCHRONIZE)
return true;
else
return false;
}
public boolean isDesireAccessSystemSecurity()
{
if((this.desiredAccess & ACCESS_SYSTEM_SECURITY) == ACCESS_SYSTEM_SECURITY)
return true;
else
return false;
}
public boolean isDesireMaximumAllowed()
{
if((this.desiredAccess & MAXIMUM_ALLOWED) == MAXIMUM_ALLOWED)
return true;
else
return false;
}
public boolean isDesireGenericAll()
{
if((this.desiredAccess & GENERIC_ALL) == GENERIC_ALL)
return true;
else
return false;
}
public boolean isDesireGenericExecute()
{
if((this.desiredAccess & GENERIC_EXECUTE) == GENERIC_EXECUTE)
return true;
else
return false;
}
public boolean isDesireGenericWrite()
{
if((this.desiredAccess & GENERIC_WRITE) == GENERIC_WRITE)
return true;
else
return false;
}
public boolean isDesireGenericRead()
{
if((this.desiredAccess & GENERIC_READ) == GENERIC_READ)
return true;
else
return false;
}
//shareAccess
public boolean isShareFileShareNone()
{
if((this.shareAccess & FILE_SHARE_NONE) == FILE_SHARE_NONE)
return true;
else
return false;
}
public boolean isShareFileShareRead()
{
if((this.shareAccess & FILE_SHARE_READ) == FILE_SHARE_READ)
return true;
else
return false;
}
public boolean isShareFileShareWrite()
{
if((this.shareAccess & FILE_SHARE_WRITE) == FILE_SHARE_WRITE)
return true;
else
return false;
}
public boolean isShareFileShareDelete()
{
if((this.shareAccess & FILE_SHARE_DELETE)== FILE_SHARE_DELETE)
return true;
else
return false;
}
//shareAccess
//CreateDisposition
public boolean isDispositionFileSupersede()
{
if((this.createDisposition & FILE_SUPERSEDE) == FILE_SUPERSEDE)
return true;
else
return false;
}
public boolean isDispositionFileOpen()
{
if((this.createDisposition & FILE_OPEN) == FILE_OPEN)
return true;
else
return false;
}
public boolean isDispositionFileCreate()
{
if((this.createDisposition & FILE_CREATE) == FILE_CREATE)
return true;
else
return false;
}
public boolean isDispositionFileOpenIf()
{
if((this.createDisposition & FILE_OPEN_IF) == FILE_OPEN_IF)
return true;
else
return false;
}
public boolean isDispositionFileoverWrite()
{
if((this.createDisposition & FILE_OVERWIRTE) == FILE_OVERWIRTE)
return true;
else
return false;
}
public boolean isDispositionFileOverWirteIf()
{
if((this.createDisposition & FILE_OVERWRITE_IF) == FILE_OVERWRITE_IF)
return true;
else
return false;
}
//CreateDisposition
//CreateOption
public boolean isCreateFileDirectoryFile()
{
if((this.createOptions & FILE_DIRECTORY_FILE) == FILE_DIRECTORY_FILE)
return true;
else
return false;
}
public boolean isCreateFileWriteThough()
{
if((this.createOptions & FILE_WIRTE_THOUGH) == FILE_WIRTE_THOUGH)
return true;
else
return false;
}
public boolean isCreateFileSequenceOnly()
{
if((this.createOptions & FILE_SEQUENCE_ONLY)==FILE_SEQUENCE_ONLY)
return true;
else
return false;
}
public boolean isCreateFileNoInterMediateBuffering()
{
if((this.createOptions & FILE_NO_INTERMEDIATE_BUFFERING) == FILE_NO_INTERMEDIATE_BUFFERING)
return true;
else
return false;
}
public boolean isCreateFileSynchronousIoAlert()
{
if((this.createOptions & FILE_SYNCHRONOUS_IO_ALERT) == FILE_SYNCHRONOUS_IO_ALERT)
return true;
else
return false;
}
public boolean isCreateFileSynchronousIoNonalert()
{
if((this.createOptions & FILE_SYNCHRONOUS_IO_NONALERT) == FILE_SYNCHRONOUS_IO_NONALERT)
return true;
else
return false;
}
public boolean isCreateFileNonDirectoryFile()
{
if((this.createOptions & FILE_NON_DIRECTORY_FILE) == FILE_NON_DIRECTORY_FILE)
return true;
else
return false;
}
public boolean isCreateFileCreateTreeConnection()
{
if((this.createOptions & FILE_CREATE_TREE_CONNECTION) == FILE_CREATE_TREE_CONNECTION)
return true;
else
return false;
}
public boolean isCreateFileCompleteIfOplocked()
{
if((this.createOptions & FILE_COMPLETE_IF_OPLOCKED) == FILE_COMPLETE_IF_OPLOCKED)
return true;
else
return false;
}
public boolean isCreateFileNoEaKnowledge()
{
if((this.createOptions & FILE_NO_EA_KNOWLEDGE) == FILE_NO_EA_KNOWLEDGE)
return true;
else
return false;
}
public boolean isCreateFileOpenForRecovery()
{
if((this.createOptions & FILE_OPEN_FOR_RECOVERY) == FILE_OPEN_FOR_RECOVERY)
return true;
else
return false;
}
public boolean isCreateFileRandomAccess()
{
if((this.createOptions & FILE_RANDOM_ACCESS) == FILE_RANDOM_ACCESS)
return true;
else
return false;
}
public boolean isCreateFileDeleteOnClose()
{
if((this.createOptions & FILE_DELETE_ON_CLOSE) == FILE_DELETE_ON_CLOSE)
return true;
else
return false;
}
public boolean isCreateFileOpenFileId()
{
if((this.createOptions & FILE_OPEN_FILE_ID) == FILE_OPEN_FILE_ID)
return true;
else
return false;
}
public boolean isCreateFileOpenForBackupIntent()
{
if((this.createOptions & FILE_OPEN_FOR_BACKUP_INTENT) == FILE_OPEN_FOR_BACKUP_INTENT)
return true;
else
return false;
}
public boolean isCreateFilenoCompresssion()
{
if((this.createOptions & FILE_NO_COMPRESSION) == FILE_NO_COMPRESSION)
return true;
else
return false;
}
public boolean isCreateFileReserveOpfilter()
{
if((this.createOptions & FILE_RESERVE_OPFILTER) == FILE_RESERVE_OPFILTER)
return true;
else
return false;
}
public boolean isCreateFileOpennoRecall()
{
if((this.createOptions & FILE_OPEN_NO_RECALL) == FILE_OPEN_NO_RECALL)
return true;
else
return false;
}
public boolean isCreateFileOpenForfreeSpaceQuery()
{
if((this.createOptions & FILE_OPEN_FOR_FREE_SPACE_QUEURY) == FILE_OPEN_FOR_FREE_SPACE_QUEURY)
return true;
else
return false;
}
//CreateOption
public boolean isSercurityContectTracking()
{
if((this.securityFlags & SMB_SECURITY_CONTEXT_TRACKING) == SMB_SECURITY_CONTEXT_TRACKING)
return true;
else
return false;
}
public boolean isSecurityEffectiveOnly()
{
if((this.securityFlags & SMB_SECURITY_EFFECTIVE_ONLY) == SMB_SECURITY_EFFECTIVE_ONLY)
return true;
else
return false;
}
@Override
public boolean isMalformed() {
return malformed;
}
@Override
public void setMalformed(boolean malformed) {
this.malformed = malformed;
}
//SecurityFlag
@Override
public String toString(){
return String.format("First Level : Nt Create Andx Request\n"+
"isMalformed = %s\n"+
"wordCount = 0x%s\n"+
"andxCommand = 0x%s , andxReserved = 0x%s , andxOffset = 0x%s\n"+
"reserved = 0x%s , nameLength = 0x%s , flags = 0x%s\n"+
"rootDirectoryFid = 0x%s , desiredAccess = 0x%s , allocationSize = 0x%s\n"+
"extFileAttribute = %s , shareAccess = 0x%s , createDisposition 0x%s\n"+
"createOptions = 0x%s , impersonationLevel = 0x%s , securityFlags = 0x%s\n"+
"byteCount = 0x%s\n"+
"fileName = %s\n",
this.malformed,
Integer.toHexString(this.wordCount),
Integer.toHexString(this.andxCommand), Integer.toHexString(this.andxReserved) , Integer.toHexString(this.andxOffset),
Integer.toHexString(this.reserved) , Integer.toHexString(this.nameLength) , Integer.toHexString(this.flags),
Integer.toHexString(this.rootDirectoryFID) , Integer.toHexString(this.desiredAccess) , Long.toHexString(this.allocationSize),
this.extFileAttributes , Integer.toHexString(this.shareAccess) , Integer.toHexString(this.createDisposition),
Integer.toHexString(this.createOptions) , Integer.toHexString(this.impersonationLevel) , Integer.toHexString(this.securityFlags),
Integer.toHexString(this.byteCount),
this.fileName);
}
}